Javascript 对于非活动选项卡,setInterval()无法正常工作

Javascript 对于非活动选项卡,setInterval()无法正常工作,javascript,jquery,html,setinterval,browser-tab,Javascript,Jquery,Html,Setinterval,Browser Tab,我正在开发一个计时器,用来记录时间。为此,我现在使用java脚本的setInterval方法,问题是若tab处于非活动状态,它就不能正常工作 我得到的一个解决方案是存储旧时间并从新时间中减去一个问题,如果在启动计时器后,如果用户更改系统时间,则会影响我的计时器。如果有其他可能的方法或解决方案,请通知我 timerInterval = setInterval(function() { seconds=seconds+1; if(seconds==60) {

我正在开发一个计时器,用来记录时间。为此,我现在使用java脚本的setInterval方法,问题是若tab处于非活动状态,它就不能正常工作

我得到的一个解决方案是存储旧时间并从新时间中减去一个问题,如果在启动计时器后,如果用户更改系统时间,则会影响我的计时器。如果有其他可能的方法或解决方案,请通知我

timerInterval = setInterval(function() {
    seconds=seconds+1;
    if(seconds==60)
    {
        minutes=minutes+1;
        if(minutes==60)
        {
            minutes=0;
            hours=hours+1;
        }                                               
        $("#task"+aData['taskId']).html(("0" + hours).slice(-2)+":"+("0" + minutes).slice(-2));
        seconds=0;
    }
},1000);

尝试
setTimeout
而不是
setInterval


setInterval
不根据浏览器负载对调用函数进行优先级排序。我也遇到过同样的问题,我用
setTimeout

解决了它。我做了一次撞击,编辑了我的时间,但计时器一直在运行

$(document).ready(function(){
  var seconds = 0;
  var hours = 0;
  var minutes = 0;

  setInterval(function(){
    seconds++;
    if(seconds == 60)
    {
        seconds=0;
        minutes++;
        if(minutes == 60)
        {
            minutes=0;
            hours++;
        }    
    }
    $(".timer").html(("0" + hours).slice(-2)+":"+("0" + minutes).slice(-2)+":"+("0" + seconds).slice(-2));
  },1000);
});
并在html中显示计时器的标记:

<h2 class="timer"></h2>


如果这对你有帮助,请告诉我

请与我们分享您的代码用户更改系统时间的情况应该很少,但是时区可能会因夏令时或旅行而改变。我建议您使用UTC日期对象来跟踪偏移量。请看,除了轮询您自己的服务器(这意味着ajax请求)之外,没有其他方法可以确定时间。经常您遇到的问题是
window.blur()
问题-当窗口没有焦点时,大多数浏览器会试图通过此时不执行javascript来节省资源。但它可能会堆积起来,然后快速执行javascript。现在,只调查用户的计算机时间并不是一个坏主意,除非时间真的是人们唯一想欺骗的东西,因为人们实际上并没有改变他们的计算机时间。你可以使用用户时间作为参考…这个问题主要发生在google chromewith timeout中。同样的问题,是的,我有一个功能,我必须多次停止setTimeout的无限循环,然后重新开始,所以这是不可能的。你是对的,如果系统时间发生变化,它会工作,但在启动计时器后,请更改你的时间浏览器用于其他工作,并在10分钟后使此浏览器处于活动状态。您将获得时间差,并使用chrome浏览器进行此测试。如果可能,我不理解您的评论,我切换到具有其他选项卡的其他浏览器,然后在大约40秒后单击“上一步”。我的计时器比预期的时间长了40秒。40秒后不会,7到8分钟后会回来。你现在面临这个问题吗?我试过了,但在这里仍然有效。。Google Chrome(46分钟)在另一个浏览器中进行操作。