使用方法
1.添加钩子函数
在调用videojs()之前,可以添加钩子函数,语法如下
videojs.hook(<name>, function)
例子:
videojs.hook('beforesetup', function(videoEl, options) {
});
videojs('vid1', {autoplay: false});
2.只执行一次钩子函数
有时候你希望你的钩子函数只执行一次,你可以在调用videojs()之前,调用videojs.hookOnce(<name>, function)
videojs.hookOnce('beforesetup', function(videoEl, options) {
});
3.获取钩子函数
videojs.hooks 可以获取播放器添加了那些钩子函数,返回的是一个函数数组
// Get an array of all the 'beforesetup' hooks.
var beforeSetupHooks = videojs.hooks('beforesetup');
4.删除钩子函数
你可以使用 videojs.removeHook 删除钩子函数
var beforeSetup = function(videoEl, options) {};
// Add the hook.
videojs.hook('beforesetup', beforeSetup);
// Remove the same hook.
videojs.removeHook('beforesetup', beforeSetup);
beforesetup
播放器被创建前会触发 beforesetup 函数。这时候你可以做两件事情
- 修改传给 video.js 的配置
- 修改 video 元素。
beforesetup 接收两个参数:
- videoEl: video元素
- options: video.js的配置
beforesetup 函数会返回一个对象配置,这个配置将会跟video.js原来的配置进行合并。
videojs.hook('beforesetup', function(videoEl, options) {
videoEl.className += ' some-super-class';
if (options.autoplay) {
options.autoplay = false
}
return options;
});
// Create a new player.
videojs('some-id', {autoplay: true, controls: true});
setup
播放器创建之后会调用setup,这时候你可以:
- 初始化插件或者启动功能
- 修改播放器对象
setup 接收一个参数 player ,player就是播放器,没有返回值。
videojs.registerPlugin('foo', function() {
this.addClass('some-super-class');
});
videojs.hook('setup', function(player) {
player.foo();
});
// Create a new player.
videojs('some-id', {autoplay: true, controls: true});
beforeerror
当播放器报错的时候,会触发beforeerror。这允许插件或者自定义的代码去拦截错误。错误有多种类型,最常见的就是code属性或者null对象。这意味着,我们应该处理这些错误。
beforeerror 接收两个参数
- palyer,播放器
- error,错误对象
返回一个错误对象,这个错误对象,会替代原来的错误对象
videojs.hook('beforeerror', function(player, err) {
const error = player.error();
if (err === null) {
return error;
}
return err;
});
error
当播放器发生错误后会触发error事件,error事件晚于beforeerror事件和其他被触发的错误事件。error事件包含包含播放器的所有错误。
error 接收2个参数:
- player,播放器
- error, beforeerror处理后的错误对象
error没有返回值
videojs.hook('error', function(player, err) {
console.log(`player ${player.id()} has errored out with code ${err.code} ${err.message}`);
});