js setTimeout同步

时间:2012-12-31 01:01:08

标签: javascript jquery settimeout

事实上,当我使用

setTimeout(a(),60);
setTimeout(a(),120);
setTimeout(a(),180);
setTimeout(a(),240);

假设函数的调用间隔为60ms。

但它不是,尤其是在页面加载或动画元素期间被触发时。事实上,当浏览器“努力工作”时,这个差距甚至会延长2倍。在某些情况下,它可以很容易地看到。

问题在于 - 是否还有其他方法可以在javascript中及时同步事件或函数?

3 个答案:

答案 0 :(得分:3)

试试这个:

setTimeout(a,60);
setTimeout(a,120);
setTimeout(a,180);
setTimeout(a,240);

请注意,该功能没有() s。

答案 1 :(得分:3)

简单来说setTimeout(a(),60)中的时间转换为I will run this function no earlier than 60ms, but if I get busy it could be later than that

因此,setTimeout不会在执行时承诺,只会在给定时间后的某个时间以毫秒为单位。

所以为了回答你的问题,没有办法保证执行setTimeout的时间,但你可以在加载DOM后加载你的脚本,这样JavaScript就不再忙了其他事情。在jQuery中,您可以使用$(document).ready()函数来实现此目的。

阅读John Resig撰写的有关JavaScript时序的更多信息:http://ejohn.org/blog/how-javascript-timers-work/

答案 2 :(得分:2)

在您的特定情况下,setInterval()可能会有效:

var count = 0, interval = setInterval(function() {
    count += 1;
    if (count > 4) {
        clearInterval(interval);
    } else {
        a();
    }
}, 60);

请注意,jQuery有一个内置的animation feature,它使用不同的,更简单的方法来简单地将动画视为时间的函数且经常checking the clock,因此意外的延迟只会使动画变为动画有点不太流畅。