2013-02-07 90 views
0

我想這是一個無限循環發生,我可以在某個時候退出暫停,但那不是點..使用Javascript - 循環裏面

所以我有兩種視頻DOM元素的列表,或圖像。

我先來看看,這是一個形象,如果是這樣:

Display the image for X seconds 
Then continue 

如果它是一個視頻

I play the video, and on the onend event, I continue 

現在我要重新開始進程列表的程序,並期待再次,視頻或圖像?所以流程會永遠持續下去,當它到達最後時,它會轉到第一個元素。

現在做所有這些都不是問題,但是把它放在一個循環中並暫停X時間,或者直到視頻播放完畢,我們都會停下來。

這是它會是什麼樣子:

func =() -> 
console.log "Loop started, now wait X seconds" 

delay 3000, -> 
    console.log "OK, I waited 3 seconds, now lets go on" 

delay 1000, -> 
    console.log "Cool, I waited another second, now lets go on" 
console.log "Ok, nothing to do, lets start again.." 
func() 

所以這個循環應該在這種情況下重新啓動每4秒 任何想法的方法,我可以看看?

+3

永遠不要用一個無限循環。如果這是您認爲需要的解決方案,請以不同的方式查看問題...... – BenM

+0

「無限循環」 - 響鈴在此響起。嘗試使用事件處理程序或超時功能。 –

+0

查找'setTimeout()'和'setInterval()'。 – JJJ

回答

1

我覺得你的代碼應該像下面這樣的結構:

status = 'nothing' 

function loop() { 
    if status == 'nothing' 

     if next item is image 
      show image 
      status = 'image' 
      countdown = 1000 // time to display the image 

     if next item is video 
      play video 
      videoIsEnded = false 
      status = 'video' 
      video.onend = function { videoIsEnded = true } 

    if status == 'image' 
     if countdown-- < 0 
      hide image 
      status = 'nothing' 

    if status == 'video' 
     if videoIsEnded 
      hide video 
      status = 'nothing' 
} 

setInterval(loop, 1000) // check the status every second 
0

不要用一個無限循環。

使用requestAnimationFrame代替:

// shim layer with setTimeout fallback 
    window.requestAnimFrame = (function(){ 
     return window.requestAnimationFrame  || 
       window.webkitRequestAnimationFrame || 
       window.mozRequestAnimationFrame || 
       window.oRequestAnimationFrame  || 
       window.msRequestAnimationFrame  || 
       function(callback){ 
       window.setTimeout(callback, 1000/60); 
       }; 
    })(); 


    // usage: 
    // instead of setInterval(render, 16) .... 

    (function animloop(){ 
     requestAnimFrame(animloop); 
     render(); 
    })(); 
    // place the rAF *before* the render() to assure as close to 
    // 60fps with the setTimeout fallback. 

爲了暫停你可能會使用時間戳:

http://jsfiddle.net/q7qrP/1/