2013-03-27 5 views
8

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

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 timer class. Надеемся, что кто-то, у кого есть дополнительные знания о d3, может ответить на следующие вопросы:

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

ответ

8

От d3's wiki:Transitions:Timer

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

Смежные вопросы