显示力图后禁用力
Disable forces once a force graph is displayed
我正在绘制有向图:JSBin。我希望图表最初显示为力,但随后用户可以自由移动节点。有两种选择,任何一种都适合我:
1) 一旦图形显示,我希望能够将任意节点拖动到任意位置,force不介入;链接长度会自动调整
2) 显示图形后,我希望能够拖动节点,链接的长度始终保持不变,但我不希望 force进行干预自动改变其他节点的位置
我尝试修改.charge(-300)
,但效果不佳,冷有人帮忙吗?
编辑 1:
我添加了 force.nodes([])
:JSBin,但它没有按预期工作...
要手动停止力导向图,您只需调用 force.stop()
。
您所描述的是在您进行任何更改时阻止力重新运行。有几种方法可以做到这一点,我认为最好的方法可能是 "detatch" 来自力导向图的节点。
要做到这一点,只需调用 force.nodes([])
。现在力导向图正在处理一个空图,您可以继续使用您的节点。要在您想要的初始布局之后执行此操作:
force.on("end", function() {
force.nodes([]);
});
我要解决这个问题:
1) 一旦图形显示出来,我希望能够将任意节点拖动到任意位置,力不介入;链接长度会自动调整
第一个:
当你将矩形或圆形作为节点时,然后像这样给它一个 class:
var circlesOrRects = svg.append("g").selectAll(".foo")
.data(force.nodes())
.enter()
.append("path")
.attr("class", "foo")//give it a class
下一步力向图停止后,如下图修复节点:
var force = d3.layout.force()
.nodes(d3.values(nodes))
.links(links)
.size([width, height])
.linkDistance(150)
.charge(-300)
.on("tick", tick)
.start()
.on("end", function(p) {
//using the class for selecting nodes.
d3.selectAll(".foo").each(function(d){
d.fixed=true;//thsi will fix the node.
});
});
现在,在力停止后,您可以将节点拖动到任何地方。
请注意,end 事件将在力 alpha 变为 0 时触发,然后节点才会固定。
工作代码here
我正在绘制有向图:JSBin。我希望图表最初显示为力,但随后用户可以自由移动节点。有两种选择,任何一种都适合我:
1) 一旦图形显示,我希望能够将任意节点拖动到任意位置,force不介入;链接长度会自动调整
2) 显示图形后,我希望能够拖动节点,链接的长度始终保持不变,但我不希望 force进行干预自动改变其他节点的位置
我尝试修改.charge(-300)
,但效果不佳,冷有人帮忙吗?
编辑 1:
我添加了 force.nodes([])
:JSBin,但它没有按预期工作...
要手动停止力导向图,您只需调用 force.stop()
。
您所描述的是在您进行任何更改时阻止力重新运行。有几种方法可以做到这一点,我认为最好的方法可能是 "detatch" 来自力导向图的节点。
要做到这一点,只需调用 force.nodes([])
。现在力导向图正在处理一个空图,您可以继续使用您的节点。要在您想要的初始布局之后执行此操作:
force.on("end", function() {
force.nodes([]);
});
我要解决这个问题:
1) 一旦图形显示出来,我希望能够将任意节点拖动到任意位置,力不介入;链接长度会自动调整
第一个:
当你将矩形或圆形作为节点时,然后像这样给它一个 class:
var circlesOrRects = svg.append("g").selectAll(".foo")
.data(force.nodes())
.enter()
.append("path")
.attr("class", "foo")//give it a class
下一步力向图停止后,如下图修复节点:
var force = d3.layout.force()
.nodes(d3.values(nodes))
.links(links)
.size([width, height])
.linkDistance(150)
.charge(-300)
.on("tick", tick)
.start()
.on("end", function(p) {
//using the class for selecting nodes.
d3.selectAll(".foo").each(function(d){
d.fixed=true;//thsi will fix the node.
});
});
现在,在力停止后,您可以将节点拖动到任何地方。
请注意,end 事件将在力 alpha 变为 0 时触发,然后节点才会固定。
工作代码here