D3.js 如何确定强制布局是否完成放置节点?

D3.js 如何确定强制布局是否完成放置节点?,d3.js,force-layout,D3.js,Force Layout,我有基于力布局的图形。我想把一个'加载'覆盖,直到图形完成放置节点。我可以使用什么事件/属性来确定图形已完成 我检查了API,找不到任何东西>P>不可能是内置的特性,这取决于您认为放置节点所做的事情。方法是调用tick函数n次,根据图形的大小和所需的精度,n次 #force.tick():运行force布局模拟一步 如果您想了解更多信息,我建议您阅读force.tick()文档:当布局收敛时,force.alpha()将设置为0。设置一个计时器来进行投票(不要太频繁!),这样你就知道什么时候完成

我有基于力布局的图形。我想把一个'加载'覆盖,直到图形完成放置节点。我可以使用什么事件/属性来确定图形已完成


我检查了API,找不到任何东西

>P>不可能是内置的特性,这取决于您认为放置节点所做的事情。方法是调用
tick
函数
n
次,根据图形的大小和所需的精度,
n

#force.tick():运行force布局模拟一步


如果您想了解更多信息,我建议您阅读
force.tick()
文档:

当布局收敛时,
force.alpha()
将设置为0。设置一个计时器来进行投票(不要太频繁!),这样你就知道什么时候完成了

此示例应每隔
间隔
毫秒重试一次,直到布局停止。变量
timer
保留当前计时器,如果不想再等待布局完成,可以重置该计时器

var timer = null;
function onCompletion(force, callback, interval) {
    interval = interval || 300;

    function retryIfRunning() {
        if (force.alpha() != 0)
            timer = setTimeout(checkAndRetry, interval);
        else {
            timer = null;
            callback();
        }
    }

    retryIfRunning();
}
从中,布局完成时,即
force.alpha==0
时,调度
end
事件

因此,您可以了解何时完成:

force
  .nodes(yourNodes)
  .links(yourLinks)
  .on('tick', function() {
    // layout is in progress
  })
  .on('end', function() {
    // layout is done
    callback();
  });

这比公认的解决方案要短得多@换个座位?