首页 > 解决方案 > 取消动画帧总是必要的

问题描述

我知道我可以手动取消requestAnimationFrame回调

function step(timestamp) {
  if (!start) start = timestamp;
  var progress = timestamp - start;
  element.style.left = Math.min(progress / 10, 200) + 'px';
  if (progress < 2000) {
    window.requestAnimationFrame(step);
  }
}

const raf = window.requestAnimationFrame(step);
window.cancelAnimationFrame(raf)

前面主要是来自 MDN 文档的示例代码。

我的问题是这样的:

requestAnimationFrame除了想要提前取消之外,我是否需要明确取消?

具体来说

if (progress < 2000) {
  window.requestAnimationFrame(step);
}

一旦进度小于 2000,这将停止递归调用自身。

这是否意味着它已从事件循环中清除?

标签: javascript

解决方案


不,没有必要

因为requestAnimationFrame只运行一次,所以您应该在检查退出条件后递归调用它(就像在您的示例中一样)

cancelAnimationFrame当动画可以被外部事件停止时很有用


推荐阅读