D3.js позволяет узлам появляться посередине без «отскока»
-
12-11-2019 - |
Вопрос
У меня есть настройка D3 с использованием «Узлов» и «Линий».Когда график впервые появляется, он подпрыгивает под действием силы тяжести, пока не останавливается посередине.Кто-нибудь знает способ, чтобы он автоматически появлялся посередине без эффекта «отскока»?
P.S. Я использую силовую раскладку.
Решение
Вызов start сбрасывает параметр охлаждения альфа;альфа затухает экспоненциально по мере того, как макет сходится к своему решению, а затем останавливается, чтобы не тратить ресурсы процессора.При запуске нет дрожания (кроме совпадающих узлов, что необходимо, чтобы избежать деления на ноль).Однако каждый раз, когда у вас возникают конфликтующие силы и геометрические ограничения (связи), естественно ожидать, что макет будет скорректирован при запуске.
Если вы хотите избежать этого отскока, вам нужно либо постоянно поддерживать график в горячем состоянии (скажем, вызывая d3.timer(function() { force.resume(); })
), или вам нужно будет сделать что-то еще, например, вручную настроить параметр альфа, чтобы разогрев происходил постепенно, а не мгновенно.
Редактировать:В версии 2.8.x вы можете полностью избежать первого отскока, запустив принудительный макет синхронно при запуске.Например: http://bl.ocks.org/1667139
Другие советы
Другая стратегия, которую я использовал ранее, - это постепенно увеличить радиусы каждого узла с нуля над первым, скажем, 50 или 100 силами.Вы можете посмотреть, как выглядит (в протовисе, но он ведет себя так же в D3) в дорлинговых картограммах на