如何处理Javascript计时器的准确性?

时间:2014-08-12 18:53:42

标签: javascript jquery timer

所以我试图通过这个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;
            }
        });

});

0 个答案:

没有答案