一直困扰着我的是setTimeout()Javascript中的方法多么难以预测.
根据我的经验,计时器在很多情况下非常不准确.由于不准确,我的意思是实际延迟时间似乎或多或少变化250-500ms.虽然这不是一个大量的时间,但当使用它来隐藏/显示UI元素时,时间可以明显地显着.
是否有任何技巧可以确保setTimeout()准确执行(不使用外部API)或这是一个失败的原因?
这真是一个非常简单的问题.如果我使用setInterval(something, 1000),我可以完全确定31天之后它会触发"某些东西" 60*60*24*31吗?或者是否存在所谓漂移的风险?
我试图为每毫秒运行一个函数,为了实现这一点,我只是setInterval在javascript中首选概念.我的代码如下,
HTML:
<div id=test>0.0</div>
Run Code Online (Sandbox Code Playgroud)
脚本:
var xVal = 0;
var xElement = null;
xElement = document.getElementById("test");
var Interval = window.setInterval(startWatch, 1);
function startWatch(){
xVal += 1;
xElement.innerHTML = xVal;
}
Run Code Online (Sandbox Code Playgroud)
所以上面的代码工作正常.但是当我使用真实时钟测试结果时,真正的时钟需要1000毫秒才能完成1秒,同时结果需要超过1000毫秒才能完成一秒钟.
谁能告诉我,
我的代码有什么错误吗?如果是,请告诉我,如何准确显示毫秒.
我构建了一个 Web 应用程序,并使用带有 500ms 计时器的 setInterval 作为某些时钟。
当窗口处于活动状态时,时钟运行完美,我使用它:
var tempTimer = 0;
setInterval(function () {
goTimer()
}, 500);
function goTimer() {
tempTimer++;
$("#timer").val(tempTimer);
}
Run Code Online (Sandbox Code Playgroud)
但问题是当窗口/选项卡变为非活动状态时 - 间隔更改为 1000 毫秒!
当我再次聚焦窗口/选项卡时,它又变回 500 毫秒。
看看这个: http: //jsfiddle.net/4Jw37/
非常感谢。