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

时间:2013-11-19 12:39:43

标签: javascript iphone ipad

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

我尝试过Blur,onload,onunload以及Visibility API这样的事件吗?

我正在使用HTML5,所以尝试将计时器值存储在本地存储中,但不确定这是否是任何想法或代码示例的最佳方法..?

由于

1 个答案:

答案 0 :(得分:5)

您正在使用的计时器不是可靠的计时器(抱歉Kelli)

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

var seconds = 0;
setInterval(function () {
    seconds += 1;
    console.log(seconds);
}, 1000);

setIntervalsetTimeout 可靠时间。它们很容易在每个刻度上偏差达100ms。如果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秒。要解决此问题,请将您的轮询次数增加到100毫秒。次要注意:getTime以毫秒为单位测量,这对于秒表来说非常有用;)


使用轮询方法,您的计时器始终可靠。如果您睡觉并且没有睡觉,计时器将会恢复。它会跳到当前时间。

只要你记得start你很好。