2015-07-20 58 views
0

我知道這應該是直線前進,如果我只是用onended事件,像這樣:切換信號源已經結束

<video src="video.ogv" id="myVideo"> 
    </video> 

<script type='text/javascript'> 
    document.getElementById('myVideo').addEventListener('ended',myHandler,false); 
    function myHandler(e) { 
     // What you want to do after the event 
    } 
</script> 

然而,結束事件在激發​​EVN後我切換音軌。我正在使用videojs播放器。

在這種特殊情況下,我在尋找發揮剪輯B,和它完成的那一刻,切換到剪輯C.

這裏是我的代碼如下所示:

// clipA is currently playing...... 
// User hits a button which calls switchVideo(); 

// video = videojs('video-player'); 
var switchVideo = function (clipB, clipC) { 
    video.src(clipB); 
    video.play(); 

    // When clipB has ended... 
    video.ended(function() { 
     console.log("clipB ended"); 
     video.src(clipC); 
     video.play(); 
    }) 
}; 

的當我調用這個函數時,我可以看到它跳到clipB片刻,然後觸發了這個冒險事件,然後視頻饋送跳轉到clipC。 如何忽略clipA的第一個冒險事件,而只是偵聽clipB?

UPDATE:這裏是最後的正確答案是什麼樣子:

// video = videojs('video-player'); 
    var switchVideo = function (clipB, clipC) { 
     video.src(clipB); 
     video.play(); 

     // When clipB has ended... 
     video.one('ended', function() { 
      console.log("clibB ended"); 
      video.src(clipC); 
      video.play(); 
     }) 
    }; 

更新2:我發現上面的代碼只能使用一次。 (這就是所謂的'one'畢竟,在我的情況下,我需要能夠做到這一點多次。

我做了一個小小的改變,那就是用video.on('ended',myfunction )代替video.one( '結束',myFunction的)。現在,我可以把它作爲根據需要多次。

我讀this Stack Overflow響應後得出了上述結論。

「的addEvent 「和」removeEvent「被替換爲」on「和」off「per the videojs API. - @Lyn Headley

最終的解決方案:

 // video = videojs('video-player'); 
     var switchVideo = function (clipB, clipC) { 
      video.src(clipB); 
      video.play(); 

      // When clipB has ended... 
      video.on('ended', function() { 
       console.log("clibB ended"); 
       video.src(clipC); 
       video.play(); 
      }) 
     }; 
+0

您是否嘗試過'video.one( '結束',函數(){}什麼)'?這隻會在視頻結束後纔會運行該功能,並且只會執行一次,防止回調堆疊。 –

+0

@keizom我在這裏沒有看到任何jQuery。 – DavidDomain

+0

您是否嘗試過removeEventListener(),切換到其他視頻,重新附加事件處理程序? – m69

回答

1

對於讀者:提問者是使用一種稱爲videojs庫,它籠罩本地JS- <視頻>接口。其中,它提供了事件功能:on,offone

原始代碼每次調用switchVideo時都會創建一個新的事件偵聽器,導致多次調用ended回調。

的解決方案是使用的one('ended')代替ended [相當於on('ended')]:

video.one('ended', function() { 
    whatever; 
});