D3JS强制布局的执行顺序开始,勾选

时间:2014-02-13 08:12:30

标签: d3.js force-layout

我正在使用d3.js.但我无法理解 force.tick如何执行(即隐式或明确地)。请尝试给出关于开始,结束和结束的执行顺序的想法。 这些活动的用途和影响是什么? 当我使用这样的东西时:

force.start();
for (var i = 0; i < n; ++i) force.tick();
force.stop();

如何生成静态图片?

P.S:这是我第一次发帖提问。如果有任何违反指南的话,请告知。

程序示例:

   var k=0;
   force.on("tick",tick);
   force.start();//now tick will execute until the alpha lowers to the threshold value
   function tick()
   {
    k++;
   }

'k'的最终值取决于alpha大于阈值的时间。

现在假设,

var k=0;
force.on("tick",tick);
force.start();//now tick will execute until the alpha lowers to the threshold value
for(var i=0;i<100;i++)
force.tick();
force.stop();
function tick()
{
k++;
}

现在我得到'k'的值是'100'

在第一种情况下,tick()被隐式调用,但现在明确调用它时如何更改执行顺序。

1 个答案:

答案 0 :(得分:4)

力布局的工作原理如下:

  • .start()开始模拟。在被召唤之前,没有任何事情发生。
  • .tick()将模拟推进一步。也就是说,计算节点上的力,并根据这些力来计算它们的位置。
  • .stop()停止模拟。它被召唤后没有任何事情发生。

您发布的代码生成静态布局的方式是模拟运行了多个时间步(n)然后停止。通常,.stop()不会被明确调用,因此模拟永远不会停止,只是进入一个没有节点移动的平衡状态。

所以回顾一下 - 开始模拟,运行n步并停止。所有这些都在页面呈现之前发生,因此您看不到任何移动。如果将n增加到一个非常大的值,则应该在呈现页面之前注意到滞后。