javascript - Setinterval 在滚动时暂停
问题描述
我仅在 Vivaldi 浏览器中遇到了一个奇怪的错误。
我正在使用 setinterval() (每 100 毫秒)来显示滚动元素,但是当我开始在 MacBook Pro 上滚动时... setinterval 停止触发并且在滚动停止之前不会恢复。
结果是在 setinterval 上淡入的元素直到用户真正停止滚动才会淡入。更奇怪的是,这种行为在页面上大约 10 秒后停止。
很好奇这是否是任何已知问题或是否有修复?
解决方案
这是一个巨大的简化,但您很可能会观察到以下行为1。
当您调用时,setTimeout / setInterval
您将函数放入事件队列中,以最早在 X ms之后执行。
但是,浏览器可能有更重要的工作要在堆栈顶部进行处理,例如绘制 UI。在这种情况下,在setInterval
处理了更高优先级的工作之前,不会处理回调。
如何缓解问题?尝试使用requestAnimationFrame来代替工作。
1欢迎对本帖进行更正。
推荐阅读
- python - cumsum pandas 创建新列
- c# - 将 SetWindowPos 与多个监视器一起使用
- node.js - 如何在 Redis 中仅提供一个实例来处理事件?
- wordpress - 在银行网站上我应该使用 DRUPAL 还是 WORDPRESS
- android - Flutter Gradle 构建异常
- javascript - JavaScript Filter 和 Reduce 连接字符串
- android - Android Studio 错误尝试获取屏幕截图:“从设备获取屏幕截图时出现意外错误:EOF”
- java - 用于休眠实体映射的 Json 到 Java 对象转换
- ruby-on-rails - 使用 fetch 发布和获取数据轨
- typescript - 类型不检查任何类型