我知道我可以手动取消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,就会停止递归调用自己。

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

最佳答案

不,没有必要

由于requestAnimationFrame仅运行一次,因此您应在检查退出条件后递归调用它(与示例中的完全一样)

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

关于javascript - 是否总是需要取消动画帧,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51033938/

10-13 00:46