这样做,每次都会移除timeListener
。
var timeListener;
var setPause = function (time) {
var video = $("video").get(0);
timeListener = function (){
if (video.currentTime >= time && video.currentTime < (time + 0.3)) {
video.pause();
}
}
video.addEventListener('timeupdate', timeListener);
video.removeEventListener('timeupdate', timeListener, false);
};
只有它不是我想要的,因为我显然不想立即删除事件监听器。我希望它能够完成它的工作,然后在下一个视频加载时删除旧的监听器。
但是,当我这样做时
var timeListener;
var setPause = function (time) {
var video = $("video").get(0);
timeListener = function (){
if (video.currentTime >= time && video.currentTime < (time + 0.3)) {
video.pause();
}
}
video.removeEventListener('timeupdate', timeListener, false);
video.addEventListener('timeupdate', timeListener);
};
removeEventListener
不起作用,我最终得到了一个附有多个侦听器的视频标签。
我的理解是你必须存储对该函数的引用,以便完全删除与添加的函数相同的函数。我认为,这两个代码之间的唯一区别在于,在后者中,time
的值在第二次调用setPause
时已经改变,因为第一个实例具有闭包访问权限对于time
的不同值,它被认为是不同的并且没有被删除。我怎么能绕过这个?
答案 0 :(得分:0)
对于任何有兴趣的人,我通过在removeEvenetListener
调用的onClick
调用问题来解决问题(实际上ng-click
但同样的事情)之前 time
已更改。所以问题,正如我所怀疑的那样,当timeListener
函数通过闭包访问不同的变量值时,它被认为是一个不同的函数。
几个星期以来一直坚持这个问题所以这已经成了我的一天!