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();
});
这比公认的解决方案要短得多@换个座位?