我有以下执行视频剪辑的方法,并且在视频剪辑的进度中它会发出一个警报,在该警报之后,它假设关闭了侦听器,但它没有结束事件列表,因此警报会一直显示喜欢无限。
这是一个BUG吗?或者以下代码中缺少某些内容?
function video_present(input) {
$('#mediaplayer').prop('loop', false);
$('#mediaplayer').attr('src', filename).show();
mediaplay_video= document.getElementById('mediaplayer');
mediaplay_video.play();
// STOP repeating??
mediaplay_video.addEventListener('timeupdate', function() {
var sss = parseInt(mediaplay_video.currentTime % 60);
show_second();
}, false);
}
// kill Event after 1 time execute of this
function show_second() {
alert('I was executed - stop me now if you can??');
mediaplay_video.removeEventListener('timeupdate', function() {
alert('I am killed, but why am i again getting called???');
});
}
video_present('Terminator_10.webm');
答案 0 :(得分:2)
removeEventListener
的第二个参数是监听器函数本身。如果您没有传递与addEventListener
相同的参数,则不会删除它。使用命名函数或函数变量来确保在两个地方都使用相同的函数对象:
function handleTimeUpdate() {
var sss = parseInt(mediaplay_video.currentTime % 60);
show_second();
}
mediaplay_video.addEventListener('timeupdate', handleTimeUpdate, false);
...
mediaplay_video.removeEventListener('timeupdate', handleTimeUpdate);