所以我试图通过这个SO post中接受的答案下的答案在Javascript中实现一个准确的计时器。我做的唯一更改是初始化 event_last_occurrence_time ,这会在某些Javascript事件初始化时发生,例如打开灯箱。我的想法是,每隔4秒钟,我就会关闭首次打开页面时弹出的灯箱。
我注意到灯箱实际上在1-2秒内关闭,而第一次浏览器启动时则为4秒。所以我做了 console.log(elapsed-event_last_occurrence_time)并跟踪我的秒表 - 似乎下面的计时机制至少比初始化时的实际时间更快(我可以通过console.log - 它跳到5-10秒,而我的秒表仍然在~2秒左右。
1)这只是Javascript中计时机制的本质,还是下面的算法存在一个明显的缺陷,我错过了?
var start = new Date().getTime(),
time = 0,
elapsed = '0.0'
event_last_occurrence_time = elapsed;
function instance()
{
time += 100;
elapsed = Math.floor(time / 100) / 10;
if(Math.round(elapsed) == elapsed) { elapsed += '.0'; }
if ((elapsed-event_last_occurrence_time)%4==0) { $.lightBox.close() }
document.title = elapsed;
var diff = (new Date().getTime() - start) - time;
window.setTimeout(instance, (100 - diff));
}
window.setTimeout(instance, 100);
$("#some_id").click(function(e)
{
$.lightBox({
onOpen: function ()
{
instance();
event_last_occurrence_time = elapsed;
}
});
});