这是可行的,每次都删除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的不同值进行闭包访问,所以它被认为是不同的,而不是被删除的。我怎么才能绕过这个问题呢?
发布于 2014-02-22 13:35:15
对于任何感兴趣的人,我都通过在onClick调用的不同函数(实际上是ng-click,但相同的东西)中调用time来解决这个问题,然后才更改time的值。因此,正如我所怀疑的,问题是,当timeListener函数通过闭包访问不同的变量值时,它被认为是一个不同的函数。
在这个问题上被困了几个星期,所以这让我很开心!
https://stackoverflow.com/questions/21954001
复制相似问题