2009-12-12 55 views
0

我有一個函數,我想爲不同的dom元素執行幾次,例如元素A,B,C和D.這個函數是遞歸的,這意味着當它完成它的執行時它會再次運行,在一些超時之後,對於相同的元素。jquery同步幾個事件

現在,我希望元素A在B,C和D之前開始執行。另外B在D和B之前開始,等等。我試過以下內容

setTimeout(execute(A),1000); 
setTimeout(execute(B),2000); 
setTimeout(execute(C),3000); 
setTimeout(execute(D),4000); 

function execute(element){ 
    doSomething(); 
    setTimeout(execute(element),5000); 
} 

我不知道這是否是正確的做法。問題是,如果我將初始超時值設置爲相同,以便它們都在同一時間開始,則一切正常。但是,如果不是,就像上面的例子那樣,那麼有時它有效,有時不會,我的意思是它總是有效,問題是它們似乎沒有遵循相同的時間順序。我看到他們在不同的時間點開始,但幾秒鐘後,例如有一些已經在同一時間...

任何想法?謝謝

回答

1

實現某種類型的隊列可能會更好,它會跟蹤要應用函數的元素,並讓它跟蹤要爲下一個執行的元素。

僞代碼:

Call function with an array of elements to execute for and optionally an interval 

Function: 
    Get the next element from the queue. 
    Execute a helper function with the retrieved element 
    Put the element back last in the queue 
    Set a timeout for the next execution time