2012-12-31 34 views
0

事实上,当我使用JS的setTimeout同步

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

它应该是调用的函数的之间的差距为60ms。

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

问题的关键是 - 是否有任何其他方式来在javascript中及时同步事件或函数?

+0

你可以将这些调用换成另一个60秒超时的函数,然后每隔120秒调用一次,每180秒调用一次...... – m02ph3u5

回答

3

试试这个:

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

注意,功能不具有()秒。

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

你的具体情况,setInterval()可能的工作:

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

注意,jQuery有一个内置的animation feature使用简单地将动画作为时间和频率的函数来处理,这是一种不同的,更好的方法,因此意外的延迟会使动画变得不那么流畅。

+1

或[requestAnimationFrame](http://paulirish.com/2011/ requestanimationframe-for-smart-animating /)但需要习惯。 – Rudie