D3.js позволяет узлам появляться посередине без «отскока»

StackOverflow https://stackoverflow.com/questions/9445618

  •  12-11-2019
  •  | 
  •  

Вопрос

У меня есть настройка D3 с использованием «Узлов» и «Линий».Когда график впервые появляется, он подпрыгивает под действием силы тяжести, пока не останавливается посередине.Кто-нибудь знает способ, чтобы он автоматически появлялся посередине без эффекта «отскока»?

P.S. Я использую силовую раскладку.

Это было полезно?

Решение

Вызов start сбрасывает параметр охлаждения альфа;альфа затухает экспоненциально по мере того, как макет сходится к своему решению, а затем останавливается, чтобы не тратить ресурсы процессора.При запуске нет дрожания (кроме совпадающих узлов, что необходимо, чтобы избежать деления на ноль).Однако каждый раз, когда у вас возникают конфликтующие силы и геометрические ограничения (связи), естественно ожидать, что макет будет скорректирован при запуске.

Если вы хотите избежать этого отскока, вам нужно либо постоянно поддерживать график в горячем состоянии (скажем, вызывая d3.timer(function() { force.resume(); })), или вам нужно будет сделать что-то еще, например, вручную настроить параметр альфа, чтобы разогрев происходил постепенно, а не мгновенно.

Редактировать:В версии 2.8.x вы можете полностью избежать первого отскока, запустив принудительный макет синхронно при запуске.Например: http://bl.ocks.org/1667139

Другие советы

Другая стратегия, которую я использовал ранее, - это постепенно увеличить радиусы каждого узла с нуля над первым, скажем, 50 или 100 силами.Вы можете посмотреть, как выглядит (в протовисе, но он ведет себя так же в D3) в дорлинговых картограммах на сайт данных One.org .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top