iPad JavaScript计时器停止运行检测睡眠模式

iPad JavaScript计时器停止运行检测睡眠模式,javascript,iphone,ipad,Javascript,Iphone,Ipad,我正在开发一个web应用程序(网站),它将在主屏幕上被标记为书签。它运行计时器/秒表,但如果你锁定iPad,它将停止JavaScript等。什么是检测iPad何时进入睡眠模式/唤醒以及如何恢复计时器的最佳方法 我尝试过模糊、onload、onunload和可见性API等事件,有什么想法吗 我正在使用HTML5,所以尝试将计时器值存储在本地存储中,但不确定这是否是最好的方法。有什么想法或代码示例吗 谢谢您使用的计时器不是可靠的计时器(对不起,凯利) 如果您查看代码,它基本上是这样做的: var s

我正在开发一个web应用程序(网站),它将在主屏幕上被标记为书签。它运行计时器/秒表,但如果你锁定iPad,它将停止JavaScript等。什么是检测iPad何时进入睡眠模式/唤醒以及如何恢复计时器的最佳方法

我尝试过模糊、onload、onunload和可见性API等事件,有什么想法吗

我正在使用HTML5,所以尝试将计时器值存储在本地存储中,但不确定这是否是最好的方法。有什么想法或代码示例吗


谢谢

您使用的计时器不是可靠的计时器(对不起,凯利)

如果您查看代码,它基本上是这样做的:

var seconds = 0;
setInterval(function () {
    seconds += 1;
    console.log(seconds);
}, 1000);
setInterval
setTimeout
计时不可靠。它们可以很容易地使每个滴答声倾斜100毫秒。如果JavaScript非常忙于处理其他事件,它可能会更加扭曲。如果浏览器休眠JavaScript事件循环,它将完全停止。你无法检测到简历,而且你的计时器完全倾斜

要解决这个问题,请使用轮询方法,使用本机的
Date
来测量时间,只有时间是准确的

// 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秒。要解决此问题,请将轮询次数增加到100ms左右。次要说明:
getTime
以毫秒为单位测量,这对于秒表非常有用;)


使用轮询方法,计时器将始终可靠。如果你睡觉并且不睡觉,计时器就会恢复。它将跳转到当前时间


只要你记得
开始
你就很好。

哇谁哇。别着急。什么?你是如何实现你的定时器的?使用插件:我会试试看。谢谢这在手机上也有用吗?当手机进入睡眠状态时。