我有一个页面需要 8-10 秒才能加载,因为服务器对外部服务进行 API 调用,该服务会处理一些大数字。提交表单后调用此函数。
最初,我在叠加层中显示了 CSS 加载动画,以向用户展示页面实际上正在执行某些操作。
然后,我通过使用 window.setTimeout() 每 2 秒调用一些代码来增强这一点,更新进度条并显示一条消息说明系统正在做什么。当然这是假的,但是当 10 秒内有 4-5 条消息需要阅读时,它会让时间显得短得多。
我的问题是超时在 Safari 中不起作用(在 MacOS 或 iOS 上)。它适用于所有其他浏览器,包括 Mac 上的 Chrome。一旦提交表单,所有计时器似乎都停止了(它也会影响横幅中的幻灯片)
有人遇到过这种情况,并且知道解决方法吗?我真的不想用 AJAX 提交来替换标准表单提交,因为这会涉及大量的重组,而我们没有预算。
最佳答案
我知道这是一个非常具体的用例,但我最终使用 CSS 动画(带有关键帧)而不是 setTimeout() 来允许动画在导航开始后运行。
我偶然发现这样一个事实:一旦页面请求开始,Safari 中的大多数动画属性似乎都不起作用,但任何“转换”属性都可以。也许这是 Safari 的一个错误,我不确定。
因此,我使用的不是“top”,而是使用了translateY,并且我使用的是scaleX,而不是宽度。
关于javascript - window.setTimeout() 在 Safari 中进行页面导航后停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53176807/