2012-04-01 70 views
0

是否setTimeout工作於WITHIN setIntervalJavascript sleep .... setTimeout from setInterval javascript

我正在寫一些JavaScript來爲一些奇怪的藝術項目設計動畫DOM元素。 我解釋我的問題的最好辦法是舉一個例子:

我有50個不同的div,我需要通過在屏幕上更改它們的位置來使用動畫,使用setInterval。我需要每個div以不同的速度移動。

我打算使用的解決方案是在我的更大的changePosition函數中有一個睡眠函數,這樣我就可以爲每個div傳遞不同的睡眠值。這樣,我可以通過字典爲每個div分配一個獨特的移動速度。

我遇到的問題是JavaScript沒有「睡眠」。它只有setTimeout,似乎沒有在我的setInterval循環內工作。

+8

向我們展示最簡單的代碼示例。 'setInterval'和'setTimeout'在彼此內部完美地工作。 – 2012-04-01 09:16:23

+0

下面是'setInterval()'和'setTimeout()'的一個工作示例:http://jsfiddle.net/X9yKc/ – ComFreek 2012-04-01 09:18:46

+1

這個程序的流程是什麼?你可以發佈代碼嗎? – Joseph 2012-04-01 09:21:56

回答

4

setTimeout()作品完美地內的setInterval(),但因爲你是試圖仿效sleep()它的JavaScript不會做或者有,它就像你正在嘗試寫同步代碼時setTimeout()作品異步的聲音給我。您需要重新思考如何編寫代碼來完成此操作。

發佈您的一些代碼,我們可以提供更多更具體的幫助。

我並不完全相信我遵循你正在嘗試做的事情,但通過對每個對象使用單獨的計時器,可能最容易以不同的速率爲每個N個不同的事物製作動畫。然後,每個對象的計時器可以按照自己的速率設置,並檢測它自己的完成,並且不必從中央計時器管理它們。另外,如果你在JavaScript中從頭開始編寫動畫例程,那麼你正在做的工作比你需要的要多得多。這個問題已經被解決了數千次了,沒有理由你必須自己重新發明它。一個簡單的谷歌搜索「JavaScript動畫例子」將顯示各種樣本和大量的代碼,你可以基於你的。這裏有一個很好的教程:http://javascript.info/tutorial/animation

像jQuery這樣的流行庫有各種各樣的動畫內置函數,也爲你做了很多骯髒的工作。動畫也可以在現代瀏覽器中使用CSS3完成(IE除外)。