chrome setInterval()用于模糊选项卡无法正常工作,即使是1秒或更长时间
chrome setInterval() for blurred tabs not working correctly, even for periods of 1 second or larger
我遇到了一个已知的问题,chrome对setInterval()
调用不精确。考虑以下代码(jsfiddle:http://jsfiddle.net/periklis/j6AU8/),显示一个简单的计时器:
<span id = "time_left"></span>
<script>
seconds = 0;
minutes = 10;
hours = 0;
setInterval(function () {
if (seconds >= 1) {seconds--;}
else {
if (seconds == 0 ) {seconds = 59;}
if (minutes >= 1) {minutes--;}
else {
if (minutes == 0) {minutes = 59;}
if (hours >= 1) {hours--;}
else {hours = 0;}
}
}
min = minutes.toString();
sec = seconds.toString()
if (min.length == 1) {min = "0" + min;}
if (sec.length == 1) {sec = "0" + sec;}
document.getElementById("time_left").innerHTML = hours + ":" + min + ":" + sec;
}, 1000);
</script>
使用chromium(28.0.1500.52),我在两个选项卡中打开了相同的脚本,一个具有焦点,另一个隐藏。过了一段时间,如果我切换到隐藏的,计时器就会滞后几秒钟。如果周期大于1'',比如说2或3,也是如此。
根据上面提供的链接,chrome应该只对小于1''的调用表现出类似的行为。有没有(纯js,而不是jquery)可以解决这个问题?
此计时器不会滞后,因为它使用Date
对象检查"实时"时间。
var endTime = new Date;
endTime.setMinutes(then.getMinutes()+10);
refresh();
function refresh(){
var diff = Math.abs((endTime-new Date().getTime())/1000);
document.getElementById("time_left").innerHTML =
zeroPad(Math.floor(diff/3600)) +
":" + zeroPad(Math.floor(diff/60))+
":" + zeroPad(Math.floor((diff%60)));
if (new Date < endTime){
setTimeout(refresh,1000);
}
}
// zeroPad method:
function zeroPad(nr,base,chr){
var len = (String(base||10).length - String(nr).length)+1;
return len > 0? new Array(len).join(chr||'0')+nr : nr;
}
JsFiddle
BTW:使用setTimeout
的优点是可以随时停止计时器(另请参阅…)
这是一个测试超时准确性的页面,在这个SO问题中使用。
相关文章:
- 按键时标记为ng的必填字段有效,即使是's是空的
- 使用ajax验证的reCAPTCHA总是返回错误,即使是正确的
- 视频通过javascript被隐藏,但已经开始播放(自动播放模式),即使是's不可见
- 如何获得Facebook Like Box"黑暗方案”;正确工作?(背景是透明的.)
- createElementNS是否始终如一地离线工作?特别是使用 SVG 命名空间
- 提交时无法正常工作.即使输入字段为空,它仍然会转到表单操作
- 我无法获得热图.js即使是简单的热图也可以工作
- 在iframe中编辑另一个网页的样式的方法,即使是表面上的
- XSS 如何工作 - 尤其是当我们有跨域安全性时
- 页面上的任何按钮都会发送表单,即使是表单标记之外的按钮
- change和onchange don'I don’我不能在电脑上工作.可能是什么原因造成的
- grunt是如何继续构建的,即使是grunt contrib符号链接也是如此;找不到路
- HTTPPOST不工作(可能是一些无法确定的愚蠢错误)
- 在更改时,即使是动态插入的输入标记上的日期选择器的处理程序也不会;不起作用
- heroku上的后台工作网络是如何知道的's结束了
- chrome setInterval()用于模糊选项卡无法正常工作,即使是1秒或更长时间
- AJAX中的XMLHttpRequest变量是如何工作的?它的工作原理是什么
- 观察到的变化'添加'回调所有项,即使是数据库中已经存在的项
- Chrome扩展无法正常工作,是我做错了什么吗
- jQuery Animate Won't Work(即使是样本也不工作)