是滴答功能的正常示例:
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的新手,一个强力脱脂。布局API并没有给我任何线索。谢谢你宝贵的时间!
答案 0 :(得分:14)
如果没有“普通”功能的完整上下文,这是一个猜测,但这里有:
tick
在d3中的许多上下文中使用。 alpha
的隐含表明这是一个force layout tick function,它由tick事件上的force layout对象调用,在这种情况下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
事件在内部tick函数结束时调度,并且只包含一个自定义属性:force布局中的当前alpha
参数。为了使这些事件实际上去任何地方,事件调度程序对象的on
方法是rebound到强制布局对象上,以便用户可以为自定义事件注册侦听器函数。
如果这对你来说太多d3内部,请关注这些细节:
e
是每次调用时都传递给tick函数的自定义事件对象 e.alpha
是力布局的当前alpha值,默认情况下从0.1开始并在每次滴答时减少(根据friction
参数),直到它降至0.005以下并且布局冻结:
在内部,布局使用冷却参数
alpha
来控制布局温度:当物理模拟收敛于稳定布局时,温度下降,导致节点移动得更慢。最终,alpha
降至阈值以下,模拟完全停止,释放CPU并避免电池耗尽。 (From the API wiki forforce.start
)