2014-03-13 55 views
-1

如何停止的javascript一段特定時間內執行? 使用setTimeout功能是可以延遲一段時間後,但在被執行旁邊setTimeout報表的等待時間來執行的語句塊。我可以暫停此同步執行嗎?掛起的JavaScript線程特定的時間段

按規定我有一個setTimeout功能循環。但在等待期間,循環正在執行。

下面是示例代碼:

for(i = 0;i < n;i++){ 
    setTimeout(function(){ 
     // Accessing the loop variable i inside this function 
    },3000); 
} 

http://jsfiddle.net/KK2mq/2/

+1

你需要使用閉包,而不是'暫停'當前線程http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example –

+1

就目前來看,目前還不清楚你在做什麼。你的問題只是「我」的價值不是你想要的嗎?你想暫停執行腳本的其餘部分嗎?你想讓數字一個接一個地出現嗎? –

+0

如果你的問題是,要暫停*循環本身*,那麼這可能是你所追求的:我如何加入一個JavaScript循環延遲(http://stackoverflow.com/a/3583740/1446005) – RandomSeed

回答

1

可以使用一個封閉件,使得在使用的i正確的值:

for (i = 0; i < 5; i++) { 
    (function (i) { 
     if (i % 2 == 0) setTimeout(function() { 
      divId = document.getElementById("withTimeOut"); 
      divId.innerHTML += i+" "; 
     }, 3000); 
    })(i); 
} 
for (i = 0; i < 5; i++) { 
    if (i % 2 == 0){ 
     divId = document.getElementById("withOutTimeOut"); 
     divId.innerHTML += i+" "; 
    } 
} 

JSFiddle here
這導致您的兩個輸出顯示相同的值。但你是否希望數字出現在彼此之後3秒?如果是這樣,情況有點不同。

如果你想的數字後,其他出現一個,你可以這樣做:

(function display(i, step, max) {  
    setTimeout(function() { 
     divId = document.getElementById("withTimeOut");   
     divId.innerHTML += i+" ";    
     i += step;   
     if(i <= max) display(i,step,max); 
    }, 3000);  
})(0,2,4);  

JSFiddle

display功能是遞歸的,自稱顯示後,每3秒以前的號碼,只要i <= 4。圍繞整個事物的(...)(0, 2, 4)意味着立即調用該函數,參數爲(0, 2, 4)

+0

我希望「withTimeOut」div中的數字一個接一個出現,並且延遲。 我曾嘗試使用while循環來創建延遲但沒用。 的代碼是這樣的: VAR timeAfterDelay =新日期()的getTime(); 而(新日期()。的getTime() Pranav

+0

@Pranav我添加了一個解決方案,它示出了由一個數字一。 –