Javascript d3 v5力模拟:如何使用stop&;打上钩

Javascript d3 v5力模拟:如何使用stop&;打上钩,javascript,d3.js,Javascript,D3.js,我试图理解停止d3的力量模拟。根据,我应该能够进行simulation.stop(),然后重新启动或勾选。但是,如果我取消注释simulation.stop()行,下面的代码就会停止工作。似乎完全忽略了simulation.tick()行。我做错了什么 我需要这个来调试节点位置演变。我希望看到节点定位在(50,50)和(51,51)处,然后随着每个记号从那里移开 var节点=[{x:50,y:50},{x:51,y:51}]; var高度=200, 宽度=200; var svg=d3 .选

我试图理解停止d3的力量模拟。根据,我应该能够进行
simulation.stop()
,然后
重新启动
勾选
。但是,如果我取消注释
simulation.stop()
行,下面的代码就会停止工作。似乎完全忽略了
simulation.tick()
行。我做错了什么

我需要这个来调试节点位置演变。我希望看到节点定位在(50,50)和(51,51)处,然后随着每个记号从那里移开


var节点=[{x:50,y:50},{x:51,y:51}];
var高度=200,
宽度=200;
var svg=d3
.选择(“正文”).追加(“svg”)
.attr(“宽度”,宽度)
.attr(“高度”,高度);
var node=svg.selectAll(“.node”)。数据(节点)
.enter().append(“g”).attr(“类”、“节点”);
node.append(“圆圈”).attr(“r”,5);
var simulation=d3.forceSimulation()
.力(“碰撞”,d3.力碰撞().半径(30));
模拟。节点(节点)。打开(“勾选”,勾选);
//模拟。停止();
simulation.tick();
模拟。勾选(10);
函数勾选(){
//控制台日志(“勾选”);
attr(“transform”,函数(d){return“translate”(“+d.x+”,“+d.y+”)”);})
}

答案由@altocumulus在评论中提供

我的代码与
simulation.stop()
不起作用,因为从未调用
ticked()
,所以节点位置未更新。如
勾选()
中所述:

此方法不分派事件

所以,
.on(“勾选”,勾选)
什么也没做。要解决此问题,可以在
tick()
之后手动调用
ticked()

while (simulation.alpha() > simulation.alphaMin()) { simulation.tick(); ticked(); }

答案由@altocumulus在评论中提供

我的代码与
simulation.stop()
不起作用,因为从未调用
ticked()
,所以节点位置未更新。如
勾选()
中所述:

此方法不分派事件

所以,
.on(“勾选”,勾选)
什么也没做。要解决此问题,可以在
tick()
之后手动调用
ticked()

while (simulation.alpha() > simulation.alphaMin()) { simulation.tick(); ticked(); }

它位于“此方法不调度事件;只有在创建模拟时自动启动或通过调用simulation.restart启动模拟时,才由内部计时器调度事件。”这意味着您的勾号处理程序在手动提前勾号时不会被调用。这将只做数学,以确保最大的性能;不过,你可以自行决定给蜱虫处理者打电话。@altocumulus,的确,我错过了。有没有办法一步一步地完成模拟,从初始位置开始,看看每一步的效果?
while(simulation.alpha()>simulation.alphaMin(){simulation.tick();ticked();}
@altocumulus,很好,请转换为答案。现在心情不太好。请随意写一个自我回答。它位于:“此方法不发送事件;只有在创建模拟时自动启动或调用simulation.restart时,事件才由内部计时器发送。”这意味着手动提前勾选时,不会调用勾选处理程序。这将只做数学,以确保最大的性能;不过,你可以自行决定给蜱虫处理者打电话。@altocumulus,的确,我错过了。有没有办法一步一步地完成模拟,从初始位置开始,看看每一步的效果?
while(simulation.alpha()>simulation.alphaMin(){simulation.tick();ticked();}
@altocumulus,很好,请转换为答案。现在心情不太好。请随意写一个自我回答。