【发布时间】:2019-04-02 13:55:08
【问题描述】:
我有一个小提琴:https://jsfiddle.net/mvLf579a/284/
此小提琴允许您使用 D3 径向布局布置力网络,并将布局重置为默认力布局。但是,重置时链接强度似乎无法正常工作。
这是径向函数:
function radial() {
simulation
.force("charge", d3.forceCollide().radius(10))
.force("r", d3.forceRadial(function(d) {
return 100
return d.id < 5 ? 100 : 200;
}, width / 2, height / 2).strength(function(d) {
return 1
// set radial force to 0 if it has the id we're looking for
if(d.id == 3) return 0
// otherwise keep the strength at 1
else return 1
})
)
// turning off previously set forces
//.force('link', null)
.force('x', null)
.force('y', null)
simulation.alpha(1).restart()
}
这里是重置功能:
function reset(){
simulation
.force("link", d3.forceLink()
//.id(function(d) {return d.id;})
.strength(1))
.force("charge", d3.forceManyBody())
.force('x', d3.forceX(width / 2))
.force('y', d3.forceY(height / 2))
.force('r', null)
simulation.alpha(1).restart()
}
我认为使用以下行会重置链接和链接强度:
.force("link", d3.forceLink().strength(1))
如果你打开小提琴,拖动链接的节点,他们会用它拖动其他节点。 (请记住,我已经复制了数据,所以有时当您拖动一个节点时,它会拖动另一个节点。
然后按'radial',这将把它们布置在径向布局中。
然后按'reset',这应该会回到它的启动方式,但它似乎不起作用。
感谢任何帮助,谢谢
【问题讨论】:
-
你不对节点的位置做任何事情,所以当你按下
reset时它们从它们所在的位置开始,所以你的对象不同于initial运行 -
@riov8 抱歉,也许我没有解释。力回来了,但是当我拖动时链接没有强度,所以拖动节点时它不会拖动连接的节点
标签: javascript d3.js