Setinterval 在滚动时暂停

Setinterval Being Paused on Scroll

我在使用 Vivaldi 浏览器时遇到了一个奇怪的错误。

我正在使用 setinterval()(每 100 毫秒)来显示滚动上的元素,但是当我开始在我的 MacBook Pro 上滚动时...setinterval 停止触发并且在滚动停止之前不会恢复。

结果是在 setinterval 淡入的元素直到用户真正停止才淡入 scrolling.To 更奇怪的是,这种行为在页面上大约 10 秒后停止。

想知道这是否是某种已知问题或者是否有修复方法?

这是一个巨大的简化,但您很可能会观察到以下行为 1

当您调用 setTimeout / setInterval 时,您将函数放在 event queue 中,以便在最早 X 毫秒后执行

但是,浏览器可能有更重要的工作要在堆栈顶部处理,例如绘画 UI。在这种情况下,setInterval 回调将不会被处理,直到处理了更高优先级的工作。

如何缓解这个问题?尝试使用 requestAnimationFrame 来代替工作。

1 欢迎更正 post。