事实上,当我使用
时setTimeout(a(),60);
setTimeout(a(),120);
setTimeout(a(),180);
setTimeout(a(),240);
假设函数的调用间隔为60ms。
但它不是,尤其是在页面加载或动画元素期间被触发时。事实上,当浏览器“努力工作”时,这个差距甚至会延长2倍。在某些情况下,它可以很容易地看到。
问题在于 - 是否还有其他方法可以在javascript中及时同步事件或函数?
答案 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,因此意外的延迟只会使动画变为动画有点不太流畅。