How to tell when a D3 force layout has stopped
http://stackoverflow.com/questions/17674016/how-to-tell-when-a-d3-force-layout-has-stopped/18408180#18408180
by zschuessler
JavaScript
/**
How to tell when a D3 force layout has stopped
http://stackoverflow.com/questions/17674016/how-to-tell-when-a-d3-force-layout-has-stopped/18408180#18408180
**/
// Data
var nodes = [{}, {}, {}];
var links = [{
source: 0,
target: 1
}, {
source: 1,
target: 2
}, {
source: 2,
target: 0
}];
// DOM
var dom = {};
dom.svg = d3.select('body')
.append('svg');
dom.links = dom.svg.selectAll('.link')
.data(links)
.enter()
.append('line')
.attr({
class : 'link',
stroke : 'black'
});
dom.nodes = dom.svg.selectAll('.node')
.data(nodes)
.enter()
.append('circle')
.attr({
r: 10,
class: 'node',
fill: 'black'
});
// Force layout
var force = d3.layout.force()
.size([500, 500])
.nodes(nodes)
.links(links)
.charge(-1500)
.linkDistance(130)
.on('tick', function (tick) {
console.log(tick);
dom.links
.attr({
x1 : function(d) { return d.source.x; },
x2 : function(d) { return d.target.x; },
y1 : function(d) { return d.source.y; },
y2 : function(d) { return d.target.y; }
});
dom.nodes
.attr('transform', function(d) {
return "translate(" + d.x + "," + d.y + ")";
});
})
.on('end', function () {
console.log('ended!');
})
.start();