这很有效 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
并不奏效,我最终得到的是一个带有多个监听器的视频标签。
我的理解是,您必须存储对函数的引用,以便 恰恰 的功能与添加的功能是一样的。这2段代码的唯一区别,我认为是在后者。time
的值在 setPause
被第二次调用,而且由于第一个实例有闭合访问权,对 time
被认为是不同的,不会被删除。我怎样才能解决这个问题?
对于任何感兴趣的人,我通过调用以下方法解决了这个问题 removeEvenetListener
的另一个函数中。onClick
(其实 ng-click
但同样的事情) 之前 价值 time
是改变了。所以,问题正如我所猜测的那样,是当 timeListener
函数可以通过闭包访问不同的变量值,它被认为是一个不同的函数。
我在这个问题上已经纠结了好几个星期了,所以这个问题让我很开心。