当窗口处于非活动状态时,防止计时器停止Javascript

时间:2013-10-02 20:43:19

标签: javascript timer

Helllo,我正在制作一个测验应用程序,并希望设置一个计时器。我想用Javascript制作它。这是我的功能:

function countDown(sec, elem) {
    _(elem).innerHTML = sec;
    if(sec < 1) {
        clearTimeout(timer);
        endGame ();
        return;
    }
    sec--;
    var timer = setTimeout('countDown('+sec+',"'+elem+'")',1000);
}

问题在于,例如,对于移动Saffari浏览器,当您将手指放在屏幕上时(如滚动效果),计时器停止,但您仍然可以看到问题...所以,基本上,你可以有无限的时间。如何使计时器无法运行?

提前谢谢!

2 个答案:

答案 0 :(得分:1)

您无法让时间“无论如何” - Mobile Safari在触摸事件期间不会运行setTimeout和setInterval函数调用。实际上,在iOS6之前,事件将完全丢弃。

您应该使用Date构造函数进行健全性检查,然后执行服务器端验证。如果有人真的想作弊,他们可以在客户端修改你的JavaScript。

答案 1 :(得分:0)

每当计时器事件触发时,您都可以随时查看Date。类似的东西:

var timerStart = function(timeLimit) {
    var remaining = timeLimit, h, m, s;
    var startTime = +new Date();/*Date.now();*/

    var instance = function() {
        if (remaining > 0) {
            remaining = timeLimit - ((+new Date()) - startTime);
            h = Math.floor(remaining / 3600000);
            m = Math.floor(remaining % 3600000 / 60000);
            s = Math.floor(remaining % 3600000 % 60000 / 1000);
            window.setTimeout(instance, 1000);
        } else {
            /* do whatever you need to do when time is up */
        }
    }

    instance();
}