requestAnimationFrame

undefined 19小时前 ⋅ 8 阅读

requestAnimationFrame作用:

①在下一次重绘前调用指定的回调函数,自动适配显示器刷新率(通常为60Hz,即每约16.67ms一次)。
②页面不可见时自动暂停,节省CPU/GPU资源和电池消耗。
③提供高精度时间戳,便于实现基于时间的平滑动画。

requestAnimationFrame代码实现(举例:倒计时器):

let lastTimestamp;
function animateCountdown(timestamp) {
  if (!lastTimestamp) lastTimestamp = timestamp;
  const elapsed = timestamp - lastTimestamp;
  if (elapsed >= 1000) {
    lastTimestamp = timestamp;
  }
  requestAnimationFrame(animateCountdown);
}
requestAnimationFrame(animateCountdown);

注意点:requestAnimationFrame与setTimeout/setInterval区别:

  • 帧率控制方面:

    前者:手动设定时间; 后者:会自动匹配显示器刷新率

  • 性能优化方面:

    前者:即使页面不可见也会运行; 后者:页面不可见时自动暂停,节省资源

  • 流畅度方面:

    前者:与屏幕刷新不同步,出现卡顿; 后者:与浏览器渲染同步,更流畅

  • 性能消耗方面:

    前者:性能消耗较高; 后者:性能消耗较低


全部评论: 0

    我有话说: