当选项卡未处于事件状态时,Javascript setInterval 无法正常工作

标签 javascript jquery setinterval

function initTimer(timeLeft) {
     var Me = this,
     TotalSeconds = 35,
     Seconds = Math.floor(timeLeft);

     var x = window.setInterval(function() {
         var timer = Seconds;

         if(timer === -1) { clearInterval(x); return; }

            $('#div').html('00:' + (timer < 10 ? '0' + timer : timer));
            Seconds--;

         },1000);
     }

我有这个代码。当此选项卡在浏览器中处于事件状态时,一切正常,但是当我更改选项卡并稍后返回选项卡时,就会出现问题。更准确地说,它错误地显示了时间。

我也尝试过 setTimeout,但问题是一样的。

我的一个想法是:HTML5 Web Workers...

但是还有另一个问题......浏览器支持。

有人可以帮忙解决这个问题吗? 如何编写 setInterval,即使选项卡未处于事件状态,它也能正常工作

最佳答案

使用Date对象来计算时间。当您要求时,不要依赖计时器触发(它们不是实时的),因为您唯一的保证是它不会在您要求之前触发。它可能会很晚触发,特别是对于不活动的选项卡。尝试这样的事情:

function  initTimer(periodInSeconds) {
            var end = Date.now() + periodInSeconds * 1000;


            var x = window.setInterval(function() {
                var timeLeft = Math.floor((end - Date.now()) / 1000);

                if(timeLeft < 0) { clearInterval(x); return; }

                $('#div').html('00:' + (timeLeft < 10 ? '0' + timeLeft : timeLeft));
            },200);
        }

initTimer(10);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="div"></div>

请注意,通过更频繁地检查它,我们可以确保它永远不会偏离太多。

关于当选项卡未处于事件状态时,Javascript setInterval 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30872185/

相关文章:

javascript - 使用office.js插入word后失去选择

php - 如何获取http响应码

jquery - 使用 MySQL 数据库中的数据通过 Flask 和 jQuery 填充下拉列表

javascript - 如何改变jQuery DatePicker控件的弹出位置

javascript - 两个定时器的同步(setInterval)

window.open 之前的 Javascript GET 请求会阻止目标 _blank

javascript - 为什么 JSON.stringify($ ('#calendar' ).fullcalendar ('clientEvents' )) 失败了?

javascript - 如何在 session 超时时关闭所有事件的 Bootstrap 模式?

javascript - 随着时间的推移在 jquery 中循环文本

javascript - for循环和setInterval,幻灯片展示