我正在开发一个网络应用程序(网站),它将在主屏幕上添加书签,它运行计时器/秒表,但如果你锁定 iPad,它会停止 JavaScript 等。检测何时出现的最佳方法是什么? iPad 进入休眠模式/唤醒以及如何恢复计时器?
我尝试过 Blur、onload、onunload 等事件以及 Visibility API,有什么想法吗?
我正在使用 HTML5,因此尝试将计时器值存储在本地存储中,但不确定这是否是最好的方法,有任何想法或代码示例..?
谢谢
最佳答案
您使用的计时器不是一个可靠的计时器(抱歉,Kelli)
如果你看一下代码,它基本上是这样做的:
var seconds = 0;
setInterval(function () {
seconds += 1;
console.log(seconds);
}, 1000);
setInterval
和 setTimeout
的计时不可靠。它们每次滴答的偏差很容易达到 100 毫秒。如果 JavaScript 非常忙于处理其他事件,它可能会出现更大的偏差。如果您的浏览器休眠 JavaScript 事件循环,它将完全停止。您无法检测到简历,并且您的计时器完全倾斜。
要解决此问题,请使用使用 native Date
的轮询方法来测量时间,只有 it 才是准确的。
// new Date creates a `Date` object with the current timestamp
var start = new Date(), now;
setInterval(function () {
now = new Date(); // poll new current time
console.log(now.getTime() - start.getTime());
}, 1000); // change to 100ms
有一个小警告:setInterval
仍然存在偏差。因此,您可能会偶尔看到时间跳动 2 秒或 0 秒。要解决此问题,请增加轮询次数,例如 100 毫秒。小提示:getTime
以毫秒为单位,这对于秒表来说非常有用;)
使用轮询方法,您的计时器将始终可靠。如果您 sleep 并再次 sleep ,计时器将恢复。它将跳转到当前时间。
只要你记得开始
,你就很好。
关于javascript - iPad JavaScript 计时器停止运行检测到 sleep 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20071830/