2012-03-01 50 views
1

這就是我試圖做FOR循環內的setInterval?

for (i=1; i<=1000; i+=100) { 
setInterval(someFunction, i); 
} 

我想實現的是,當頁面加載對話框將會出現和它的影子會閃動慢,然後快速將停止當i = 1000。 我是新手,迄今爲止,我做了this

+2

太糟糕了。如果您告訴我們什麼不起作用以及您得到了哪個錯誤,我們可能會幫助您。 – 2012-03-01 01:59:57

+0

你的意思是「它沒有解決」?如果你在問題中沒有提供足夠的細節,我們不能提供幫助 - 你需要說明爲什麼它不起作用;你想要什麼樣的行爲以及你想要做什麼樣的行爲。 – Bojangles 2012-03-01 02:00:18

+0

你想完成什麼?它怎麼沒用? – 2012-03-01 02:00:36

回答

2

閱讀是否有可能或不?

是的。假設someFunction是對函數或包含JavaScript代碼的字符串的引用,for循環將按原樣「工作」,其中「work」的意思是「不給出語法錯誤,但幾乎肯定不會達到我想象中的真正想要的效果」。

setInterval() function調用你通過它的函數重複,每次調用之間有一個固定的(受瀏覽器怪癖)延遲。只要該頁面處於打開狀態,或者直到您使用clearInterval()來取消該功能,它都會一直調用該功能。

所以通過在循環中調用setInterval()您正在設置(在您的情況下)10個獨立的時間間隔,所有這些時間間隔都會重複調用您的函數。第一個調用someFunction的時間間隔爲0ms,這比瀏覽器實際使用的時間要小,所以會被舍入到更多像4ms。第二個間隔將以100ms間隔呼叫someFunction。第三個以200ms的間隔調用該函數。等等。在你的循環結束後,你的函數每秒會被重複調用的次數比我可以計算的更多。

看起來你真正想要做的事情是撥打someFunction() 10次,每次通話之間延遲100ms。如果是這種情況,則可以在循環中使用setTimeout() function,因爲(每次使用)setTimeout()都會在指定的延遲後恰好調用您的函數一次。

+0

我是新手,你能告訴我什麼是'setTimeOut()' – FoxKllD 2012-03-01 02:58:15

+0

我已經告訴你了。在我的回答結束時說,'setTimeout()'將「在指定的延遲之後恰好調用你的函數一次」,而'setInterval()'將反覆調用你的函數。查看我鏈接到的MDN頁面在我的答案中。 – nnnnnn 2012-03-01 03:20:04

1

您不需要將循環中的設置間隔設置爲多次運行。

試圖通過本教程javascript.info

+0

這恰好也是一個不好的例子。將一串JS代碼傳遞給'setInterval'是20世紀90年代。我認爲即使這樣很糟糕。我們只是不知道更好。 :P – cHao 2012-03-01 02:27:49

+0

@cHao - 如果返回足夠遠的話,傳遞一個字符串是唯一的選擇。 – nnnnnn 2012-03-01 02:51:56

+0

對不起,我沒有意識到w3schools是如此糟糕的資源。 – user1239299 2012-03-01 03:05:48