при использовании компоновки сил в d3.js, можно удалять узлы с помощью силы столкновения путем увеличения воображаемого радиуса, окружающего узлы.Изменение поведения столкновений многих узлов, хранящихся в массиве
Я создал отдельную кнопку с именем button
, и я хочу использовать .data()
(для выбора целого массива), чтобы увеличить радиус столкновения на 40 из многих узлов при нажатии на эту кнопку. Например, когда фильтруется число узлов хранится в массиве с именем abc
, я попробовал этот код:
var node =......
.on("click", function(d, i)
{
abc = start && start.path(d) || [];
node.style("fill", function(n)
{
if (n == start) {
return "yellow";
} else if (n == d){
return "green"
}
else if (abc.includes(n)){
return "red"
}
else {
return "lightgrey"
}
.....
});
button.on("click", function(d) {
d3.selectAll("circle").data().forEach(d => d.r = 6);
d3.select(abc).data().r = 40;
simulation.nodes(data);
simulation.alpha(0.8).restart();
})
Я могу нажать на 2 узлах и хранить эти 2 узла и все узлы между ними в массиве abc
. Это возможно с помощью функции d3.js path()
, которая возвращает кратчайший путь между двумя узлами.
Но, к сожалению, это не сработает. Может быть, есть кто-то, кто может помочь мне в этой проблеме. Основная идея отталкивания узлов уже обсуждается здесь: Using the force-layout physics for seperated elements Большое спасибо!
Вы имеете в виду цитаты в этой строке? 'd3.select (" abc "). data(). r = 40;'? –
Да. Вы выбираете тег? Я так не верю. Также укажите, как создается abc. –
Я только что отредактировал код. –