javascript - iPad JavaScript 计时器停止运行检测到 sleep 模式

标签 javascript iphone ipad

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

我尝试过 Blur、onload、onunload 等事件以及 Visibility API,有什么想法吗?

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

谢谢

最佳答案

您使用的计时器不是一个可靠的计时器(抱歉,Kelli)

如果你看一下代码,它基本上是这样做的:

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

setIntervalsetTimeout 的计时可靠。它们每次滴答的偏差很容易达到 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/

相关文章:

php - onkeyup 太慢了

javascript - 如何仅列出数组中包含 '3' 的数字?

iphone - 如何从另一个类文件调用函数

ios - 更改高度时如何在单元格中显示标签 View 的全文

ios - 检测 GPS 是否可用 iPad(内部蜂窝或外部蓝牙)

javascript - 如何创建一个 setInterval 循环来编辑 chrome url

javascript - 返回带有 Node 的原始 html(只是 html 到 var 中)

html - 当用户点击 HTML 元素时,如何更改它的颜色?

iphone - 如何以编程方式更改 iPhone 的蓝牙参数?

cocoa - 通过 iPad 应用程序使用 Instruments 'Allocation'