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();