Я использую компоновку силы в D3.js v4. Теперь я хочу щелкнуть узел и использовать физику силы как collide
только для одного узла.Использование физики силового макета для разделенных элементов
Моделирование для каждого узла на всей SVG это:
var simulation = d3.forceSimulation()
.force("link", d3.forceLink().id(function(d) {
return d.index
}))
.force("collide", d3.forceCollide(function(d) {
return d.r + 8
}).iterations(16))
.force("charge", d3.forceManyBody())
.force("center", d3.forceCenter(chartWidth/2, chartWidth/2))
Теперь я хочу, чтобы изменить поведение collide
для одного узла я нажал на толкать другие узлы прочь или привлечь их.
Есть ли кто-нибудь, кто знает решение? Я немного поработал с функцией фильтрации и остановил/перезапустил макет, но это не сработало.
Благодаря Херардо, могу ли я задать вопрос? Я не очень хорошо понял ваш код. Эта строка 'var data = d3.range (30) .map (d => ({ r: 6 ..." немного смущает меня, потому что я думал, что 'map()' используется для использования функции на существующий массив и получает новый массив с этой используемой функцией? В этом случае я не вижу, что такое старый массив? –
Я сделал это только для того, чтобы быстрее создать 20 объектов в массиве. Старый массив - '[ 0, 1, 2, 3 ..., 20] ', сделанные' d3.range (20) '. –
@Derick Я должен быть честен с вами: когда мы тратим некоторое время на написание кода для ответа, а просто просто говорит «спасибо», это немного раздражает. Я, как правило, мысленно черный список этих людей и игнорирую их будущие вопросы. Не будьте такими ... Вам не нужно принимать ответ, но выбивать его - это простой и дешевый токен признательность. –