【问题标题】:Does d3's transitions and animations use requestAnimationFrame?d3的转场和动画是否使用requestAnimationFrame?
【发布时间】:2013-03-27 20:32:02
【问题描述】:

我正在尝试确定 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 时我是否需要自己使用它?

【问题讨论】:

    标签: javascript animation d3.js requestanimationframe


    【解决方案1】:

    来自d3's wiki:Transitions:Timer

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

    【讨论】:

    • d3 v4 及更高版本的相同链接:github.com/d3/d3-timer#d3-timer:在内部,它使用 requestAnimationFrame 进行流畅动画(如果可用),如果延迟超过 24 毫秒,则切换到 setTimeout。
    猜你喜欢
    • 1970-01-01
    • 2016-01-13
    • 2019-08-27
    • 1970-01-01
    • 2012-10-30
    • 2019-05-08
    • 2015-01-14
    • 1970-01-01
    • 2014-07-20
    相关资源
    最近更新 更多