2013-06-01 105 views
11

我有一個JavaScript文件,並在幾個地方我想添加一個小的延遲,所以腳本將達到這一點,等待3秒,然後繼續其餘的代碼。我認爲這樣做的最好方法是創建一個函數,我可以從腳本的任何地方調用函數。如何創建JavaScript延遲功能

function startDelay(lengthOfDelay) 
{ 
//code to make it delay for lengthOfDelay amount of time 
} 

但是,我找不到任何方法來實現代碼,使它等待。我看了一下setTimeout,但是你需要將函數硬編碼到它中,這對我沒有好處。

有沒有什麼辦法可以讓腳本暫停幾秒鐘?在代碼暫停時,我不會在界面凍結時出現問題。

如果沒有,是否有一種方法可以使用PHP sleep()來實現此目的? (我知道PHP是服務器端,Javascript是客戶端,但也許有一種我沒有聽說過的方式。)

+2

最簡單的方法是使用[setTimeout](https://developer.mozilla.org/en-US/docs/Web/API/window.setTimeout),並在您提供的函數中執行剩餘的代碼設置超時。 –

+1

http://stackoverflow.com/questions/10312963/javascript-settimeout – smerny

回答

30

您不需要使用匿名函數setTimeout。你可以這樣做:

setTimeout(doSomething, 3000); 

function doSomething() { 
    //do whatever you want here 
} 
+0

我將如何創建一個函數,例如startDelay(lengthOfDelay),我可以從**的任何位置調用**並讓它執行剩餘的之後的代碼,不只是_ //在這裏做你想做的任何事情? – user2370460

+0

我不確定你想要做什麼。你想停止執行頁面還是安排延遲執行的函數? – Kassem

+0

@Kassem我認爲他的意思是(例如)如果你想使用for循環,每秒鐘都要用console.log消息呢?即'while(true){[一個延遲函數,併入console.log]}'我不認爲你的函數將按順序運行。 – geotheory

2

啊是的。歡迎來到異步執行。

基本上,暫停腳本會導致瀏覽器和頁面在3秒內無響應。這對Web應用程序來說很糟糕,所以不受支持。

相反,你必須考慮「基於事件」。使用setTimeout在一段時間後調用一個函數,這段時間內將繼續運行頁面上的JavaScript。

+1

有沒有辦法做到這一點?讓頁面無響應對我來說實際上是一件好事! – user2370460

+1

fortunatelly yes:sleep.js http:// stackoverflow。com/a/16873849/667927 –

0

您可以通過下面的例子創建一個延遲

setInterval(function(){alert("Hello")},3000); 

更換與毫秒

#你可以把你想要的函數內部執行了什麼內容。

+5

這個答案略有不足(我認爲),因爲setInterval將每3秒繼續運行一次,而不是一次。 –

+0

@AdamDavis我已經測試過這種方法,並沒有遇到任何問題。如果你或其他人對此進行了測試並以其他方式證明,讓社羣瞭解。謝謝 –

+0

@CBC_NS我只是試了一下,我也每3秒重複一次。方便記住,但。 –