首页 > 解决方案 > Setinterval 在滚动时暂停

问题描述

我仅在 Vivaldi 浏览器中遇到了一个奇怪的错误。

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

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

很好奇这是否是任何已知问题或是否有修复?

标签: javascriptscrollvivaldi

解决方案


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

当您调用时,setTimeout / setInterval您将函数放入事件队列中,以最早在 X ms之后执行。

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

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

1欢迎对本帖进行更正。


推荐阅读