2014-10-09 59 views
8

下面是蜱功能的正常例子:傳遞給d3.js force tick回調函數的`e`參數是什麼?

function tick(e) { 
    nodes 
     .each(cluster(10 * e.alpha * e.alpha)); 
} 

誰可以告訴我「E」的定義是什麼?它有什麼屬性? 我找不到任何關於「e」的描述,以及e.alpha的含義是什麼。是的,我用谷歌,但沒有結果。


感謝您對以下的幫助。

我複製一些代碼,它使用

var force = d3.layout.force() 
     .nodes(nodes) 
     .size([width, height]) 
     .charge(-70) 
     .gravity(0.1) 
     .on("tick", tick) 
     .start(); 

所以它只是你猜的情況。我是新來的d3,一個force.layout的API skim沒有給我任何線索。感謝您寶貴的時間!

+1

搜索'內[此篇] e.alpha'(http://flowingdata.com/2012/08/02/how-to-make-an-interactive-network-可視化/)。 – FernOfTheAndes 2014-10-09 15:11:41

+0

請給出更多關於你在哪裏找到這個功能的上下文。單獨呈現函數並不會告訴您任何有關將傳遞給它的參數的性質。我已經對我的答案做出了合理的猜測,但是由於沒有足夠的信息來診斷問題,所以應該關閉這個問題。 – AmeliaBR 2014-10-09 20:34:41

回答

14

沒有你的「正常」功能的完整的上下文,這是一個有點猜測,但在這裏有雲:

tick在D3中很多情況下被使用。 alpha包含暗示這是一個force layout tick function,它由tick事件上的強制佈局對象調用,在這種情況下,e將是tick事件對象。

關於tick事件沒有太多的文檔,因爲大多數例子都不使用它。如果檢查source code,你會看到

// A rudimentary force layout using Gauss-Seidel. 
d3.layout.force = function() {      //line 11 
    var force = {}, 
     event = d3.dispatch("start", "tick", "end"); 
    /* ... */ 
    force.tick = function() {      //line 58 
     // simulated annealing, basically 
     if ((alpha *= .99) < .005) { 
      event.end({type: "end", alpha: alpha = 0}); 
      return true; 
     } 
     /* code to implement default force layout adjustments */ 
     event.tick({type: "tick", alpha: alpha}); //line 128 
    }; 
    /* ... */ 
    return d3.rebind(force, event, "on");   //line 305 
}; 

換句話說,Tick事件是使用d3.dispatch過程中的D3源代碼中創建了三個類型的自定義事件之一。特別是tick事件在內部打勾函數結束時分派,並且只包含一個自定義屬性:力佈局中的當前alpha參數。爲了使這些事件實際發生在任何地方,事件派發器對象的on方法是rebound,這樣用戶就可以爲自定義事件註冊偵聽器函數。

如果一切是你太多D3內部,只專注於這些細節:

  • e是傳遞給你剔功能每次調用時自定義事件對象
  • e.alpha被力佈局的當前alpha值,默認開始於0.1,並得到(根據friction參數)在每個刻度,直到它低於0.005和佈局凍結降低:

    在內部,佈局使用控制佈局溫度的冷卻參數alpha:隨着物理模擬收斂在穩定佈局上,溫度下降,導致節點移動更慢。最終,alpha降到閾值以下,模擬完全停止,釋放CPU並避免電池消耗。 (From the API wiki for force.start

+0

對不起,但我不得不感謝你的讚揚。目前,這是afaik,它是傳遞給參數化的on(「tick」函數,以及「alpha」組件意味着什麼(除了d3源代碼之外)的唯一公共文檔。「e.alpha」在幾個例子中使用(例如Google「d3 multiple force layouts」),所以我希望我可以給這個答案一個以上的投票(不是說你需要SO代表)。不幸的是,這個答案在Google搜索中不容易出現,但在SO搜索中找到並不難。 – Mars 2015-02-20 17:22:47

+1

感謝@Mars。你讓我做了一些我應該在10月份做的事情:我[更新了d3 API wiki]( https://github.com/mbostock/d3/wiki/Force-Layout#on)包含這些信息,所以它應該會更容易在將來找到! – AmeliaBR 2015-02-20 21:05:21

+0

很酷(我仍然在這裏找到你的答案非常有幫助。我不明白整個調度的事情,它是有用的看到一個解釋,明確引用「滴答」的定義,需要一個參數。) – Mars 2015-02-21 02:10:42

相關問題