你有幾個問題你fadeIn()
功能:
A.您的循環條件是i==100
,這是不是第一次迭代真實,因此for循環將永遠不會被執行主體( i++
將不會發生)。也許你的意思是i<=100
或i<100
(取決於你想循環運行101次還是100次)?
B.你setInterval
代碼有語法錯誤編輯:,因爲你已經更新了你的問題,以刪除引號 - setInterval
預計字符串或函數引用/表達。所以你需要傳遞一個函數的名字而不用括號和參數,或者像函數表達式那樣,你可以在下面的代碼中看到匿名函數表達式。 以您嘗試構建傳遞它的字符串的方式。你有這樣的:
"Opacityto("+elem,i+")"
,但你需要這樣的:
"Opacityto(elem," + i + ")"
後者產生一個字符串,取決於i
,貌似"Opacityto(elem,0)"
,即,它產生的JavaScript的有效一塊將調用Opacityto()
函數。
C.你可能想setTimeout()
而不是setInterval()
,因爲setInterval()
將運行Opacityto()
功能每100ms 永遠,而setTimeout()
將延時100ms後運行Opacityto()
一次。鑑於你是在一個循環中調用它,我相信你不會真的想要呼叫setInterval()
100次,導致你的功能Opacityto()
每100ms運行100次永遠。 D.即使解決了上述所有問題,你的基本結構也不會做你想要的。當您撥打setInterval()
或setTimeout()
時,它不會暫停執行當前的代碼塊。因此,整個for循環將運行並立即創建所有間隔/超時,然後當100毫秒到達時,它們將全部或多或少一次被觸發。如果你的意圖是逐漸改變與每一個變化發生的每100ms,那麼你需要下面的代碼(或在其上的一些變化)的不透明度:
function fadeIn(i){
// if called with no i parameter value initialise i
if (typeof i === "undefined") {
i = -1;
}
if (++i <= 100) {
Opacityto(document.getElementById('nav'), i);
setTimeout(function() { fadeIn(i); }, 100);
}
}
// kick it off:
fadeIn();
什麼上面所做的是定義fadeIn()
,然後調用它傳遞任何參數。該函數檢查i
是否未定義,如果是,則將其設置爲-1(如果您不通過參數調用它,會發生什麼情況)。然後它會增加i
並檢查結果是否小於或等於100,如果是,則調用Opacityto()
傳遞對元素的引用和i
。然後它使用setTimeout()
在100ms時間內呼叫本身,通過當前i
通過。因爲setTimeout()
在if測試中,所以一旦i
變得足夠大,該功能停止設置超時,並且整個過程結束。
有你可以實現這幾個其他的方式,但是這只是發生了,因爲我開始打字第一...
爲什麼不看一下在GitHub jQuery代碼,看看他們是怎麼做的? – AlienWebguy
@AlienWebguy多數民衆贊成在一個好主意,我會檢查出來。謝謝 –
Eval是邪惡的,兄弟。將實際函數傳遞給setInterval而不是字符串。 – hugomg