切换信号源已经结束
问题描述:
我知道这应该是直线前进,如果我只是用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();
})
};
答
对于读者:提问者是使用一种称为videojs库,它笼罩本地JS- <视频>接口。其中,它提供了事件功能:on
,off
,one
。
原始代码每次调用switchVideo
时都会创建一个新的事件侦听器,导致多次调用ended
回调。
的解决方案是使用的one('ended')
代替ended
[相当于on('ended')
]:
video.one('ended', function() {
whatever;
});
您是否尝试过'video.one( '结束',函数(){}什么)'?这只会在视频结束后才会运行该功能,并且只会执行一次,防止回调堆叠。 –
@keizom我在这里没有看到任何jQuery。 – DavidDomain
您是否尝试过removeEventListener(),切换到其他视频,重新附加事件处理程序? – m69