2014-02-13 44 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

我已經更新了這個問題,以指定我想問的問題。請檢查。 –