什么是传递给d3.js强制回调函数的`e`参数?

spi*_*ang 9 d3.js force-layout

下面是刻度函数的正常示例:

function tick(e) {
     nodes
      .each(cluster(10 * e.alpha * e.alpha));
}
Run Code Online (Sandbox Code Playgroud)

谁能告诉我"e"的定义?它有什么属性?我找不到任何关于"e"的描述,以及e.alpha的含义是什么.是的,我使用谷歌但没有结果.


感谢您在下面给出的帮助.

我正在复制一些使用的代码

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

所以这就是你猜的情况.我是d3的新手,剥离了force.layout API并没有给我任何线索.谢谢你宝贵的时间!

Ame*_*aBR 14

如果没有"正常"功能的完整上下文,这是一个猜测,但这里有:

tick在d3中的许多上下文中使用.这alpha意味着这是一个强制布局刻度函数,它由一个tick事件上的force layout对象调用,在这种情况下e就是tick事件对象.

关于tick事件没有很多文档,因为大多数示例都不使用它.如果您检查源代码,您将看到

// 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
};
Run Code Online (Sandbox Code Playgroud)

换句话说,tick事件是使用d3.dispatch进程在d3源代码中创建的三种类型的自定义事件之一.该tick特别事件在内部蜱函数结束时分派,且只包含一个自定义属性:当前alpha的力量布局中的参数.为了使这些事件实际上去任何地方,on事件调度程序对象的方法被反弹到强制布局对象,以便用户可以为自定义事件注册侦听器函数.

如果这对你来说太多d3内部,请关注这些细节:

  • e 是每次调用时传递给tick函数的自定义事件对象
  • e.alpha是力布局的当前alpha值,默认情况下从0.1开始并friction在每个刻度处减小(根据参数),直到它降至0.005以下并且布局冻结:

    在内部,布局使用alpha控制布局温度的冷却参数:当物理模拟收敛于稳定布局时,温度下降,导致节点移动得更慢.最终,alpha降至阈值以下并且模拟完全停止,释放CPU并避免电池耗尽.(来自API维基force.start)