2012-12-31 54 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