2014-10-09 130 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