2013-10-25 74 views
1

我還是一個Javascript新手。我試圖編寫一個程序,使圖像fadeToggle所有的時間,所以我用while while條件語句(結合一個常量變量);運行後凍結我的電腦(然後記住病毒基本上是無限的操作),我在這裏搜索了一下,意識到我應該確實不會使用無限循環。 (其實我想要閃光 - 意思是從不透明度0.9到0.6到0.9等等......),所以它與淡入淡出不一樣,但同樣的問題仍然存在;我怎麼讓它去無限(無需編寫惡意代碼。)如何在不凍結的情況下創建永久動畫?

這是我寫的,供大家參考:

<script> 
$(document).ready(function(){ 
var always10 = 10; 
while (always10 == 10) { 
    $('.pimg').fadeToggle(2600); 
        } 
}); 
</script> 

而且,我發現了另一個線程while(true)更好無限循環。所以另一個問題:是無限循環有時好嗎?

+2

在Javascript中,Inifinite循環幾乎不會有問題。它是單線程的,所以你將永遠無法與文檔進行交互。使用'setInterval()'在後臺定期運行一個函數。 – Barmar

回答

0

由於Javascript是asynchornous沒有sleep方法。相反,一個好主意是使用setIntervalsetTimeout

如果沒有這些功能,您的循環會盡可能地佔用大部分資源,並可能導致凍結(取決於您的瀏覽器)。

+0

Asynchornous和睡眠模式=超過我的頭(我不會說另一種編程語言,所以:-P),但setInterval和setTimeout解決了我的問題。就像另一張海報,我想寫我自己的,所以我沒有去jquery。謝謝大家! –

0

只需使用已經jQuery的動畫提供的回調像.fadeToggle

function fadeToggleForever ($e) { 
    $e.fadeToggle({ 
     duration: 2600, 
     // start another fadeToggle when this one completes 
     complete: function() { fadeToggleForever($e) } 
    }); 
} 

// main code 
fadeToggleForever($('.pimg')); 

的使用完整回調的工作,因爲jQuery的動畫在內部使用setTimeout(或者setInterval),因此「產量」執行代碼,以使瀏覽器可以繼續對用戶輸入做出反應並更新顯示。

相關問題