在D3 force中拖动一个节点时停止移动其他节点

时间:2019-01-31 12:41:09

标签: d3.js d3-force-directed

我用d3.forceSimulation()制作了D3强制定向图,并附加了拖动功能。单击一个节点时,我不希望其他节点相应移动。现在,可以通过将d.fxd.fy设置为以下内容来冻结要拖动的节点:

function dragended(d) {
    if (!d3.event.active) simulation.alphaTarget(0);
    d.fx = d.x;
    d.fy = d.y;
}

是否可以在拖动一个节点时冻结所有其他节点?

1 个答案:

答案 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;
        }
    });
}

演示在这里:https://jsfiddle.net/casbie/21dvjcgn/