Используют ли переходы и анимацию d3 requestAnimationFrame?

Я пытаюсь выяснить, используют ли анимации d3 по умолчанию requestAnimationFrame для обратного вызова уже или мне нужно сделать это самому. Например, я определил пользовательскую анимацию, которая многократно вызывает функцию перерисовки для анимации перехода от одного домена к другому на графике (это в coffeescript):

rd = @redraw # a function that takes an argument to redraw the graph
@svg.transition()
  .duration(1000)
  .tween "zoom", -> 
      interp = d3.interpolate(current_dom, target_dom)
      (t) -> rd interp(t)

Все остальные вызовы перерисовки я планирую с помощью requestAnimationFrame:

scheduleRedraw: =>
  # Stop a previous request if it hasn't executed yet
  cancelAnimationFrame(@animRequest) if @animRequest       
  @animRequest = requestAnimationFrame => @redraw

Тем не менее, мне интересно, нужно ли мне делать то же самое здесь. Я просматривал исходный код d3 и вижу, что единственная ссылка на requestAnimationFrame находится в d3. класс таймера. Надеюсь, кто-то, кто знает больше о d3, может помочь ответить на следующие вопросы:

  • Используется ли таймер d3 глобально для всех анимаций и переходов d3?
  • Нужно ли мне использовать requestAnimationFrame вручную здесь? Если нет, есть ли случай, когда мне когда-нибудь понадобится использовать его самостоятельно при использовании d3?

person Andrew Mao    schedule 27.03.2013    source источник


Ответы (1)


Из вики d3:Transitions:Timer

Если ваш браузер поддерживает это, очередь таймера будет использовать requestAnimationFrame для плавной и эффективной анимации.

person Thodoris Greasidis    schedule 23.05.2013
comment
Та же ссылка для d3 v4 и выше: github.com/d3/d3-timer#d3- timer: внутренне использует requestAnimationFrame для плавной анимации (если доступно), переключаясь на setTimeout для задержек более 24 мс. - person Jason Kao; 11.05.2020