2012-05-11 97 views
0

正如標題所說..有任何可能的方式有簡單的JavaScript動畫,而不使用jQuery,setTimeout的,和setInterval的。我一直在研究太久,找不到任何東西。可能沒有辦法做到這一點,只是想知道。尋找跨瀏覽器的東西,所以CSS動畫也無法工作。JavaScript動畫WITHOUT jQuery的/的setTimeout/setInterval的

+0

有一個關鍵的問題丟失了:爲什麼'setTimeout()'和'setInterval()'是你的問題? – Amadan

+0

爲什麼你甚至想要做一個沒有jQuery的動畫?這可能是觸摸DOM的最佳/最快/最安全的方式。 – frenchie

+0

您可以使用動畫GIF - 在所有瀏覽器中都支持,並且完全不需要任何JavaScript。 – RobG

回答

5

現在做大多數動畫的「正確」方式是window.requestAnimationFrame,它的作用類似於setTimeout,因爲它在指定的時間運行回調函數。

它的優化,在60fps運行,在某些瀏覽器(FF),它會給你毫秒的確切數量,直到下一個平局,這樣就可以非常精確地計算動畫位置。

谷歌「requestAnimationFrame墊片」對於各種跨瀏覽器實現對舊的瀏覽器。墊片全部使用setTimeout —這是沒有辦法解決的。

+0

這是我在尋找的!謝謝! – ALF

+1

'window.requestAnimationFrame'只適用於某些瀏覽器(例如,在IE10之前沒有IE版本,在5.3之前沒有Safari版本,等等)。詳情請參閱http://www.caniuse.com/#search=requestanimationFrame。而且,舊版瀏覽器的解決方法都使用'setTimeout()'或'setInterval()',所以沒有辦法。所以,如果你需要它在沒有定時器的瀏覽器上工作,這個答案不能解決這個問題(因爲沒有解決方案)。 – jfriend00

+1

@ jfriend00 - 這不就是我在最後一句話中所說的嗎? :) –

1

不,你怎麼能沒有間隔/超時,並能夠跨瀏覽器做到這一點?你需要繼續觸發它。

1

除非你在用戶輸入上設置動畫。如果您在用戶觸發鼠標移動事件或頁面滾動事件時設置了某些動畫,它可能會有效,但它會停下來,並且100%依賴於用戶觸發它。

0

不,我不認爲這是做在JavaScript中的暫停,而無需使用setTimeout()setInterval()的任何方式。

我能想到的唯一的辦法是到了JavaScript等待像一個XMLHttpRequest對象的反應,這是超越荒謬的一些事件。

如果您正在尋找一些方便的「暫停執行(x)毫秒並繼續」,如在Unix系統上的Thread.sleep()或Unix系統上的usleep(),則不會有這樣的事情可悲。

我記得聽說爲了計時的目的,在一個運行在Google Sketchup上的Ruby腳本中,有人花費了一段時間製作一個隱藏的HTML窗口,只是爲了運行一個使用setInterval()的JavaScript,所以他們會有一個計時機制。我認爲如果你爲了運行JavaScript而仍然使用setInterval(),那麼可能沒有其他選擇。