【问题标题】:setInterval() is not working properly for inactive tabsetInterval() 不适用于非活动选项卡
【发布时间】:2015-01-16 20:52:56
【问题描述】:

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

一个解决方案我必须存储旧时间并从新时间中减去一个问题,如果在启动计时器后如果用户更改系统时间那么它会影响我的计时器。如果有任何其他可能的方法或解决方案,请告诉我。

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);

【问题讨论】:

  • 请分享您的代码
  • 用户更改他的系统时间应该很少见,但是时区可能会因夏令时或旅行而改变。我建议您使用 UTC 日期对象来跟踪偏移量。
  • 除了轮询您自己的服务器之外,没有其他方法可以确定时间,这意味着一个 ajax 请求。经常。您遇到的问题是window.blur() 问题 - 当窗口没有聚焦时,大多数浏览器会尝试通过此时不执行 javascript 来节省资源。但它可能会堆积起来然后快速执行javascript。现在,只轮询用户计算机的时间并不是一个坏主意,除非时间真的是人们想要欺骗的唯一东西,因为人们实际上并没有改变他们的计算机时间。您可以将用户时间用作参考...
  • 这个问题多发生在google chrome

标签: javascript jquery html setinterval browser-tab


【解决方案1】:

尝试setTimeout 而不是setInterval

setInterval 不根据浏览器负载优先调用函数。我遇到了同样的问题,我使用setTimeout解决了它

【讨论】:

  • 与超时相同的问题,是的,我有一个功能,我必须多次停止 setTimeout 的无限循环并重新开始,所以这是不可能的。
【解决方案2】:

我做了一个 plunker,我编辑了我的时间,但计时器继续运行。

$(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>

http://plnkr.co/edit/yWQWrGxnkgOFvXDoLNhU?p=preview

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

【讨论】:

  • 你是对的,如果系统时间发生变化,它就可以工作,但是在启动计时器后,更改你的浏览器以进行其他工作,并在 10 分钟后使该浏览器处于活动状态,你将获得时间差异并为此使用 chrome 浏览器尽可能测试
  • 我不明白您的评论,我切换到具有其他选项卡的其他浏览器,然后在大约 40 秒后单击返回。我的计时器比预期的多 40 秒。
  • 不是 40 秒后 7 到 8 分钟后回来
  • 你现在遇到这个问题了吗?
  • 我试过了,但它仍然可以在这里工作.. Google Chrome(46 分钟)在不同的浏览器中执行操作。
猜你喜欢
  • 2011-12-26
  • 2019-12-09
  • 1970-01-01
  • 2022-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-27
相关资源
最近更新 更多