Ben d3'ü temelden kuvvete yönlendirilmiş bir grafiği kodlayarak öğreniyorum.Modum aşağıda. Anlamadığım şey force.on'un amacıdır. ('tick' ...Neden force.on'a ihtiyacımız var d3
Düzeni için yerleşik bir sınıf kullanıyorsanız, d3.layout.force() öğelerinizi düğümlerinize ve bağlantılarınıza vermeniz yeterli olacağını düşünmüştüm. Grafiği dengeli bir düzlemde çizebilme
force.on ('tick' bölümü ...) 'i açıklarsam tüm dairelerim ve çizgilerim sol üst köşede olur. ne olduğu arasındaki fark içten içe ve svg kapsayıcıda neler oluyor bu nedenle force.on'a ('tick'), her seferinde geçerli dahili değerler kümesine uydurmak için düzeni yeniden çizelim.
var nodes = [
{},
{},
{}
];
var links = [
{'source': 0, 'target': 1}
];
// append svg element to container
var mychart = d3.select('#chart')
.append('svg')
.attr('width', w)
.attr('height', h);
// create force layout in memory
var force = d3.layout.force()
.nodes(nodes)
.links(links)
.size([w, h]);
// append a group for each data element
var node = mychart.selectAll('circle')
.data(nodes).enter()
.append('g')
.call(force.drag);
// append circle onto each 'g' node
node.append('circle')
.attr('fill', palette.green)
.attr('r', circleWidth);
/*force.on('tick', function(e) {
node.attr('transform', function(d, i) {
return 'translate('+ d.x +', '+ d.y +')';
})
link
.attr('x1', function(d) { return d.source.x })
.attr('y1', function(d) { return d.source.y })
.attr('x2', function(d) { return d.target.x })
.attr('y2', function(d) { return d.target.y })
});*/
var link = mychart.selectAll('line')
.data(links).enter()
.append('line')
.attr('stroke', palette.gray)
force.start();
Tamam, bu onu berrak hale getirir. Bununla birlikte, simülasyonu güncellemek için force.start() öğesini çağırmanız gereken düğümleri veya bağlantı dizisini güncellediğinizde de okudum. Bunu burada görmüyorum. Bu, işleyicinin sonuna ulaştığında, ** tick ** işleyicisinin arka planda çağırdığı anlamına mı geliyor? Ve ** link ** ve ** node ** DOM öğelerine referans veriyor, ancak 'd' simülasyonun durumunu gösteriyor? – timebandit
Onay işleyicisi sizin tarafınızdan tanımlanmıştır, böylece istediğiniz her şeyi arayabilirsin. Kuvvet düzeni üzerinde çalışan düğümler ve bağlantılar, Javascript veri yapılarıdır ve DOM düğümlerinden tamamen ayrıdır (aslında veri ve DOM düğümleri arasındaki bağlantı, onay işleyicisinde güncellenen şeydir). –