.off 进度更新'timeupdate',稍后使用 .on 恢复



使用video.js媒体播放器,我想继续播放媒体,但暂时暂停更新进度指标(进度 - bar和当前时间指示器)。一段时间后,我想恢复进度指标。

这些进度指标会收听" timeupdate"事件。我无法弄清楚如何删除特定功能。使用video.off('timeupdate');,我删除了" timeupdate"事件的所有处理程序。但是我不想删除所有" timeupdate"处理程序,只有2个特定的处理程序:

.controlBar.currentTimeDisplay.updateContent()
.controlBar.progressControl.seekBar.update()

我失去了尝试删除特定处理程序的所有不同方式。

以下内容无效:

video.player_.controlBar.currentTimeDisplay.off(video.player_, 'timeupdate', this.updateContent)
Uncaught TypeError: Cannot read property 'guid' of undefined

这不会引起错误,但也没有做任何事情:

video.player_.controlBar.currentTimeDisplay.off(video.player_, 'timeupdate', video.player_.controlBar.currentTimeDisplay.updateContent)

使用此功能,我以后可以还原进度显示:

video.on('timeupdate', function(){
                this.controlBar.currentTimeDisplay.updateContent();
                this.controlBar.remainingTimeDisplay.updateContent();
                this.controlBar.progressControl.seekBar.updateARIAAttributes();
                this.controlBar.progressControl.seekBar.update();
});

,但我认为这也不是正确的。

我做一个jsfiddle来显示我要做的事情:https://jsfiddle.net/bj23381d/2/暂停了进度更新,但是所有其他听取'timeupdate'的事件也已删除。

通过向对象添加函数以删除和添加其事件听众来使其工作。

var video = videojs('example_video_1');
function startStopUpdate() {
    vjs.CurrentTimeDisplay.prototype.stopUpdateContent = function(){
        this.off(this.player_, 'timeupdate', this.updateContent);
    }
    vjs.CurrentTimeDisplay.prototype.startUpdateContent = function(){
        this.on(this.player_, 'timeupdate', this.updateContent);
    }
    vjs.SeekBar.prototype.stopUpdate = function(){
        this.off(this.player_, 'timeupdate', this.update);
    }
    vjs.SeekBar.prototype.startUpdate = function(){
        this.on(this.player_, 'timeupdate', this.update);
    }   
}
videojs.plugin('startStopUpdate', startStopUpdate);
video.startStopUpdate();
function stopUpdate(){
    console.log('stopUpdate');   
    video.controlBar.currentTimeDisplay.stopUpdateContent();
    video.controlBar.progressControl.seekBar.stopUpdate();
}
function startUpdate(){
    console.log('startUpdate');
    video.controlBar.currentTimeDisplay.startUpdateContent();
    video.controlBar.progressControl.seekBar.startUpdate();
};
setTimeout(stopUpdate, 2000);
setTimeout(startUpdate, 10000);

https://jsfiddle.net/bj23381d/4/

相关内容

  • 没有找到相关文章

最新更新