2014-02-13 49 views
2

我正在使用d3.js.但我无法理解force.tick如何执行(即隐式或显式)。请尽量说明启动,打勾和结束的执行顺序。 这些事件的用途和影响是什么? 此外,当我使用这样的:D3JS强制布局开始的执行顺序,请勾选

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”的最终值取决于所述α是多久大于阈值。

现在假设,

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”

在第一种情况下刻度()是越来越暗中调用但现在,当它被显式调用执行顺序如何改变。

回答

4

力布局是这样的:

  • .start()开始模拟。在它被调用之前,没有任何反应。
  • .tick()提前一个时间步模拟。也就是说,节点上的力是根据这些力来计算的,并且它们的位置是基于这些力的。
  • .stop()停止模拟。它被调用后没有任何反应。

您发布的代码生成静态布局的方式是模拟运行多个时间步骤(n),然后停止。通常,.stop()没有被明确地调用,所以模拟从未真正停止,只是处于一个平衡状态,没有节点再移动。

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

+0

因此,“开始”隐含地称为“打勾”。如果是,那么当我们明确地调用“tick”时会产生什么差别? –

+0

模拟调用'.tick()',而不是'.start()'函数本身。如果你明确地调用它,你明确地推进了模拟一步。你可以把它看作一个每秒钟递增的计数器,但你也可以明确地增加。 –

+0

我已经更新了这个问题,以指定我想问的问题。请检查。 –