10

我试图弄清楚 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 计时器类中。希望对 d3 有更多了解的人可以帮助回答以下问题:

  • d3 计时器是否全局用于所有 d3 动画和过渡?
  • 我需要在requestAnimationFrame这里手动使用吗?如果没有,在使用 d3 时我是否需要自己使用它?
4

1 回答 1

11

来自d3 的 wiki:Transitions:Timer

如果您的浏览器支持,定时器队列将使用 requestAnimationFrame 来实现流畅高效的动画。

于 2013-05-23T18:44:41.353 回答