Javascript倒计时进展缓慢?

时间:2013-11-20 01:49:41

标签: javascript

我正在尝试倒计时,以毫秒为单位倒计时;然而,倒计时实际上需要超过7秒。知道为什么?

function countDown(time){
    var i = 0;
    var interval = setInterval(function(){
        i++;

        if(i > time){
            clearInterval(interval);
        }else{
            //mining
            $('#mining_time').text($('#mining_time').text()-1);
        }

    }, 1);
}

我可以确认传递给函数的可变时间是否正确设置为7000。

3 个答案:

答案 0 :(得分:3)

对于大多数准确的倒计时,请使用setTimeout()

setTimeout(fn, 7e3);

如果您必须尽可能接近7秒,请使用紧密轮询(requestAnimationFrame())并查看开始时间与当前轮询之间的差异。

var startTime = Date.now();
requestAnimationFrame(function me() { 
     var deltaTime = Date.now() - startTime;
     if (deltaTime >= 7e3) {
         fn();
     } else {
         requestAnimationFrame(me);
     }
});

根据需要进行填充。

答案 1 :(得分:2)

  1. 7秒后运行内容的最精确方法 - 使用setTimeout ms {/ 1}}
  2. 一个。没有浏览器可以保证以1ms的分辨率运行间隔。在最好的情况下,它将是7-10ms
  3. 湾js中只有一个线程,因此任务排队。这意味着只有在当前运行完成后才会安排下一次运行。
  4. 一些有用的阅读:http://ejohn.org/blog/how-javascript-timers-work/

答案 2 :(得分:1)

没有浏览器会将1作为setInterval的参数。在我的头顶,最小值是4毫秒。

要获得准确的结果,请获取当前时间,添加7000毫秒,并轮询(使用setInterval或setTimeout),直到达到新的时间。

快速网络搜索返回this article,提供了一个示例。

[更新] this MDN page上提到了4 ms的值。