切换信号源已经结束

问题描述:

我知道这应该是直线前进,如果我只是用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

对于读者:提问者是使用一种称为videojs库,它笼罩本地JS- <视频>接口。其中,它提供了事件功能:on,offone

原始代码每次调用switchVideo时都会创建一个新的事件侦听器,导致多次调用ended回调。

的解决方案是使用的one('ended')代替ended [相当于on('ended')]:

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