【问题标题】:iPad JavaScript timer stop running detecting sleep modeiPad JavaScript计时器停止运行检测睡眠模式
【发布时间】:2013-11-19 12:39:43
【问题描述】:

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

我尝试过诸如 Blur、onload、onunload 和 Visibility API 之类的事件有什么想法吗?

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

谢谢

【问题讨论】:

标签: javascript iphone ipad


【解决方案1】:

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

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

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

setIntervalsetTimeout 在计时方面是可靠的。它们可以很容易地在每个滴答声中偏移 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 秒。要解决此问题,请将轮询次数增加到 100 毫秒。小注:getTime 以毫秒为单位,这对于秒表来说非常有用;)


使用轮询方法,您的计时器将始终可靠。如果您睡觉和不睡觉,计时器将恢复。会跳转到当前时间。

只要你记得start,你就很好。

【讨论】:

  • 我会试一试的。谢谢
  • 这也适用于移动设备吗?当手机进入睡眠状态时。
猜你喜欢
  • 2011-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多