我用d3.forceSimulation()
制作了D3强制定向图,并附加了拖动功能。单击一个节点时,我不希望其他节点相应移动。现在,可以通过将d.fx
和d.fy
设置为以下内容来冻结要拖动的节点:
function dragended(d) {
if (!d3.event.active) simulation.alphaTarget(0);
d.fx = d.x;
d.fy = d.y;
}
是否可以在拖动一个节点时冻结所有其他节点?
答案 0 :(得分:0)
感谢@ rioV8的提示!我试图在拖动一个节点时修复其他节点。
node.call(d3.drag()
.on('start', dragstarted)
.on('drag', dragged)
.on('end', dragended))
function dragged(d) {
d.fx = d3.event.x;
d.fy = d3.event.y;
fix_nodes(d);
}
// Preventing other nodes from moving while dragging one node
function fix_nodes(this_node) {
node.each(function(d){
if (this_node != d){
d.fx = d.x;
d.fy = d.y;
}
});
}