0

事实上,当我使用

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

函数调用之间应该有 60 毫秒的间隔。

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

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

4

3 回答 3

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/

于 2012-12-31T01:14:43.457 回答
3

尝试这个:

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

请注意,该函数没有()s。

于 2012-12-31T01:04:24.113 回答
2

在您的特定情况下,setInterval()可能会起作用:

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

请注意,jQuery 有一个内置的动画功能,它使用不同的更好的方法,将动画简单地视为时间的函数并经常检查时钟,因此意外的延迟只会使动画不太流畅。

于 2012-12-31T01:23:25.157 回答