2013-03-27 11 views
8

Sto cercando di capire se le animazioni predefinite di d3 usano già requestAnimationFrame per il callback o se devo farlo da solo. Per esempio, ho definito un'interpolazione personalizzato che chiama una funzione di ridisegno ripetutamente all'animazione una transizione da un dominio ad un altro su un grafico (questo è in CoffeeScript):Le transizioni e le animazioni di d3 utilizzano 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) 

In tutte le mie altre chiamate a ridisegnare, I programmare con requestAnimationFrame:

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

Tuttavia, mi chiedo se ho bisogno di fare la stessa cosa qui. Sono stato a guardare la fonte d3 e vedere che l'unico riferimento a requestAnimationFrame è nel d3 timer class. Speriamo che qualcuno con qualche conoscenza in più su d3 possa rispondere alle seguenti domande:

  • Il timer d3 è utilizzato globalmente per tutte le animazioni e transizioni d3?
  • Devo utilizzare manualmente requestAnimationFrame qui? In caso contrario, c'è qualche caso in cui dovrei mai usarlo io stesso durante l'utilizzo di d3?

risposta

8

Da d3's wiki:Transitions:Timer

Se il browser supporta, la coda di timer utilizzerà requestAnimationFrame per l'animazione fluida ed efficiente.

Problemi correlati