如何从JWPlayer实例中删除事件处理程序

How to remove a event handler from JWPlayer instance?

本文关键字:删除 事件处理 程序 实例 JWPlayer      更新时间:2023-09-26

我正在使用JWPlayer。设置播放器后,我需要添加监听器到一些事件,给一个例子,我听events.JWPLAYER_MEDIA_TIME这样:

jwplayer('video-container').onTime(this.onTimeHandler);

过了一会儿,我需要删除这个事件监听器,阅读文档我找不到任何解决方案。

查看代码,似乎不可能删除事件侦听器:当您调用onTime(或任何其他设置事件处理程序的方法)时,回调将被推入数组,因此第二次调用它不会覆盖以前的侦听器,而只是向数组添加一个新的侦听器。

当监听器不再需要执行任务时,可以设置一个标志:

onTimeHandler : function() {
  if (! this.handleOnTimeEvents)
    return;
  ...
}

我是这样处理的。创建一个伪函数,其唯一目的是作为一个指针。我关心的是onComplete事件,所以我写了如下代码:

function createJWPlayer(surl, stitle, autos, pw, ph) {
    jwplayer("videocontainer").setup({
        file: surl,
        title: stitle,
        width: pw,
        height:  ph,
        autostart: autos,
        stretching: "uniform",
        skin: "/Scripts/JWPlayer/six.xml"
    });
    jwplayer().onComplete(function (e) {
            jwcompleteevent(e);
        });
}
function jwcompleteevent(e) {
    // method to remain empty, sole purpose is to provide a pointer for the handler
}

然后在创建它的函数中,我这样写:

var mcomplete = (selobj.HasQ == false) ? InterActNoTimeAutoS : jwpCompleteInterA;
createJWPlayer(selobj.Upath, ti.TestTitle, true, "100%", "100%");
jwcompleteevent = mcomplete;

如果我需要加载另一个视频,我会这样做

mcomplete = (selobj.HasQ == false) ? InterActNoTimeAutoS : jwpCompleteInterA;
jwcompleteevent = mcomplete;
loadJwPlayerUrl(selobj.Upath, true);

如果有人看到这个问题,请告诉我,它似乎在开发环境中按需工作