d3的过渡和动画是否使用requestAnimationFrame?

时间:2013-03-27 20:32:03

标签: javascript animation d3.js 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 timer class。希望对d3有更多了解的人可以帮助回答以下问题:

  • d3计时器是否全局用于所有d3动画和过渡?
  • 我是否需要在此手动使用requestAnimationFrame?如果没有,是否有任何我需要在使用d3时自己使用它的情况?

1 个答案:

答案 0 :(得分:8)

来自d3's wiki:Transitions:Timer

  

如果您的浏览器支持,则使用计时器队列   requestAnimationFrame用于流畅和高效的动画。