Остановите перемещение других узлов при перетаскивании одного узла в D3 forceSimulation - PullRequest
0 голосов
/ 31 января 2019

Я сделал принудительно ориентированный граф D3 с помощью d3.forceSimulation() и прикрепил функцию перетаскивания.При нажатии на один узел я не хочу, чтобы другие узлы двигались соответственно.Теперь я могу заморозить перетаскиваемый узел, установив d.fx и d.fy следующим образом:

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

Можно ли заморозить все остальные узлы при перетаскивании одного узла?

1 Ответ

0 голосов
/ 01 февраля 2019

Спасибо @ 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/

...