removeEventListener没有删除函数

问题描述 投票:1回答:1

这很有效 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 被认为是不同的,不会被删除。我怎样才能解决这个问题?

javascript html5-video dom-events event-listener
1个回答
0
投票

对于任何感兴趣的人,我通过调用以下方法解决了这个问题 removeEvenetListener 的另一个函数中。onClick (其实 ng-click 但同样的事情) 之前 价值 time 是改变了。所以,问题正如我所猜测的那样,是当 timeListener 函数可以通过闭包访问不同的变量值,它被认为是一个不同的函数。

我在这个问题上已经纠结了好几个星期了,所以这个问题让我很开心。

© www.soinside.com 2019 - 2024. All rights reserved.