2012-07-30 63 views
0

我有兩個按鈕播放和停止。當我點擊播放時,我希望圖像像幻燈片一樣運行。 我正在使用setTimeout(),並等待5秒後再運行。setTimeOut沒有等待適當的延遲時間

單擊播放時,代碼運行正常,等待5秒鐘,然後顯示下一個圖像,但是當我單擊停止,然後再次單擊播放時,它會停止等待正確的時間間隔。而不是等待5秒在運行之前,對於前兩個圖像等待一秒,對於下一個等待5秒,對於接下來的兩個等待一秒鐘等等。

爲什麼它第一次正確運行然後破壞重試?

代碼:

var stop = false; 
playClickfunction() { 
    showImages(); 
} 
showImages() { 
    //code to display image for all no of images 
    //and user can stop on any no of image.. 
    if(!stop) 
     setTimeout(showImages, 5000); 
} 

stopClickfunction() { 
    stop = true; 
} 

回答

1

你需要清除停止超時。

也許嘗試類似的東西:

var timer = false; 

playClickfunction() 
{ 
    showImages(); 
} 

showImages() 
{ 

    //code to display image for all no of images 
    //and user can stop on any no of image.. 
    if(!stop) 
     timer = setTimeout(showImages, 5000); 
} 

stopClickfunction() 
{ 

    clearTimeout(timer) 
} 
+0

感謝它的正常工作..你節省了我很多的時間。再次感謝:) – 2012-07-30 06:53:37

+0

@ user1485293如果答案是解決您的問題,請[標記爲答案](http://meta.stackexchange.com/q/5234/165558) – 2012-07-30 06:56:16

1

嘗試使用的正確方法比用一個標誌變量

var timer = setTimeout(showImages, 5000); 
clearTimeout(timer); 
+0

謝謝!它使用clearTimeout。 – 2012-07-30 07:09:50

0

,你應該使用的方法clearTimeOut()來

+0

謝謝!它使用clearTimeout。 – 2012-07-30 07:09:55

0

如果您單擊停止,然後在5秒鐘之前再次單擊啓動,第一個超時將繼續運行。你需要做的是明確的超時,而不只是停止圖像,但每次開始被點擊,如:

var timeout; 

function start() { 
    stop(); 
    showImages(); 
    } 
} 

function stop() { 

    if (timeout) { 
    clearTimeout(timeout); 
    timeout = null; 
    } 
} 

function showImages() { 
    // do stuff, then 
    timeout = setTimeout(showImages, 5000); 
} 

或者,如果單擊開始和超時設置,只是忽略點擊自計時器已經在運行。在這種情況下,你會這樣做:

function start() { 
    if (!timeout) { 
    showImages(); 
    } 
} 
+0

謝謝!它使用clearTimeout。 – 2012-07-30 07:10:02