【发布时间】:2014-08-12 17:42:17
【问题描述】:
在对this question 的回答中,mbostock 指出“如果一个节点是固定的,它只能通过拖动而不是模拟来移动。”
但是,如果我想通过设置 d.x 和 d.y 值以编程方式定位节点怎么办?到目前为止,我的尝试都失败了。我已经尝试了 d.x 和 d.y 的明显设置,但是对于固定节点,这些值被忽略了。我也尝试过暂时“取消修复”、重绘,然后“重新修复”节点,但这也不起作用——节点在下一次滴答时会神奇地重置到它们的原始位置。
这是后一种方法的running example。
这是该代码的关键部分,在点击时执行:
function explicitlyPosition() {
node.each(function(d) {
d.x = 0;
d.y = 0;
d.fixed = false;
});
tick();
node.each(function(d) {
d.fixed = true;
});
force.resume();
}
有没有办法使用我尝试过的方法或类似方法来做到这一点?或者我可以在 D3 中使用完全不同的图形布局,但理想情况下我希望图形的大部分以力导向的方式布局。
谢谢!
【问题讨论】:
-
如果我理解您要正确执行的操作,您只需将真假换成
fixed。也就是说,当您明确设置.x和.y时,fixed应该为真,否则为假。 jsfiddle.net/2ov2La89/16 -
手动(重新)设置刻度处理程序中固定节点的位置。
标签: javascript d3.js force-layout