Я пытаюсь преобразовать направленный по силе граф из d3 v3 в v4. Мой проект здесь:
https://bl.ocks.org/anonymous/337d113cb77c3695ac6959bebe728795
Почему не выполняется действие двойного щелчка на узлах, высвобождающих узел обратно в схему нормального усилия? Связанные с drag and pin функции находятся непосредственно под кодом узла.
После установки свойств d.fx
и d.fy
узлы не будут перемещаться независимо от d.fixed
. Вы устанавливаете эти свойства здесь:
function dragged(d) {
d.fx = d3.event.x;
d.fy = d3.event.y;
}
Из документации API d3v4:
Чтобы зафиксировать узел в заданной позиции, вы можете указать два дополнительных свойства:
fx - the nodes fixed x-position fy - the nodes fixed y-position
В конце каждого тика после применения каких-либо сил узел с определенным узлом.fx имеет node.x сбрасывается на это значение, а node.vx устанавливается на ноль; Аналогично, узел с определенным узлом.fy имеет node.y сбрасывается на это значение, а node.vy устанавливается на ноль. Чтобы исключить ранее установленный узел, установите node.fx и node.fy в значение null или удалите эти свойства.
Я не читал это перед тем, как сделать демонстрацию раздвоенной из вашего блока, но эффект тот же: я установил свойства d.fx
и d.fy
неопределенным с двойным щелчком, что позволяет им располагаться в соответствии с силой диаграмма.
Причина, по которой вы можете использовать d.fixed для фиксированных позиций, - это метод, используемый в v3:
fixed - логическое значение, указывающее, заблокирована ли позиция узла.