【发布时间】:2019-04-29 19:31:13
【问题描述】:
背景:
使用 setInterval 或 setTimeout 时,我们会收到一个 Id 来取消/清除操作。
setInterval/setTimeout:
const timeoutId = setTimeout(() => {clearTimeout(timeoutId)}, 1000);
const intervalId = setInterval(() => {clearInterval(intervalId)}, 1000);
requestAnimationFrame: 使用 raf 时,对于 step 的每一次迭代,我们都会重置 rafId,并且我们只在最新的 rafId 上调用 cancelAnimationFrame?
let rafId;
function step(timestamp) {
rafId = requestAnimationFrame(step);
console.log(timestamp, rafId)
if(timestamp >= 1000) {
cancelAnimationFrame(rafId);
}
}
rafId = requestAnimationFrame(step);
问题:
当rafId 不断更新时,cancelAnimationFrame 如何知道关闭所有先前对 requestAnimationFrame 的调用?
我猜测 cancelAnimationFrame 使用 frameId 并关闭它后面的所有内容。
如果是这样,它如何与多个 requestAnimationFrames 一起工作(因为它们将共享一个 frameId)
【问题讨论】:
标签: javascript settimeout setinterval requestanimationframe cancelanimationframe