Event Listening
Using on
var player = videojs('some-player-id');
var Component = videojs.getComponent('Component');
var myComponent = new Component(player);
var myFunc = function() {
var myComponent = this;
console.log('myFunc called');
myComponent.on('eventType', myFunc);
myComponent.trigger('eventType');
// logs 'myFunc called'
myFunc的上下文将是myComponent,除非它被绑定。 您可以将侦听器添加到另一个元素或组件。
var otherComponent = new Component(player);
// myComponent/myFunc is from the above example
myComponent.on(otherComponent.el(), 'eventName', myFunc);
myComponent.on(otherComponent, 'eventName', myFunc);
otherComponent.trigger('eventName');
// logs 'myFunc called' twice
Using off
var player = videojs('some-player-id');
var Component = videojs.getComponent('Component');
var myComponent = new Component(player);
var myFunc = function() {
var myComponent = this;
console.log('myFunc called');
myComponent.on('eventType', myFunc);
myComponent.trigger('eventType');
// logs 'myFunc called'
myComponent.off('eventType', myFunc);
myComponent.trigger('eventType');
// does nothing
如果myFunc被排除,则事件类型的所有侦听器都将被删除。 如果eventType被排除,则所有侦听器都将从组件中删除。 您可以使用以删除添加到其他元素或组件的侦听器:
myComponent.on(otherComponent...
在这种情况下,事件类型和侦听器函数都是必需的
var otherComponent = new Component(player);
// myComponent/myFunc is from the above example
myComponent.on(otherComponent.el(), 'eventName', myFunc);
myComponent.on(otherComponent, 'eventName', myFunc);
otherComponent.trigger('eventName');
// logs 'myFunc called' twice
myComponent.off(ootherComponent.el(), 'eventName', myFunc);
myComponent.off(otherComponent, 'eventName', myFunc);
otherComponent.trigger('eventName');
// does nothing
Using one
var player = videojs('some-player-id');
var Component = videojs.getComponent('Component');
var myComponent = new Component(player);
var myFunc = function() {
var myComponent = this;
console.log('myFunc called');
myComponent.one('eventName', myFunc);
myComponent.trigger('eventName');
// logs 'myFunc called'
myComponent.trigger('eventName');
// does nothing
您还可以将监听器添加到仅被触发一次的另一个元素或组件。
var otherComponent = new Component(player);
// myComponent/myFunc is from the above example
myComponent.one(otherComponent.el(), 'eventName', myFunc);
myComponent.one(otherComponent, 'eventName', myFunc);
otherComponent.trigger('eventName');
// logs 'myFunc called' twice
otherComponent.trigger('eventName');
// does nothing
Using trigger
var player = videojs('some-player-id');
var Component = videojs.getComponent('Component');
var myComponent = new Component(player);
var myFunc = function(data) {
var myComponent = this;
console.log('myFunc called');
console.log(data);
myComponent.one('eventName', myFunc);
myComponent.trigger('eventName');
// logs 'myFunc called' and 'undefined'
myComponent.trigger({'type':'eventName'});
// logs 'myFunc called' and 'undefined'
myComponent.trigger('eventName', {data: 'some data'});
// logs 'myFunc called' and "{data: 'some data'}"
myComponent.trigger({'type':'eventName'}, {data: 'some data'});
// logs 'myFunc called' and "{data: 'some data'}"
默认组件树
Video.js播放器的默认组件结构如下所示:
Player 播放器
├── MediaLoader (has no UI) 媒体加载
├── PosterImage 海报图片
├── TextTrackDisplay 文本轨道显示
├── LoadingSpinner 加载旋转器
├── BigPlayButton 大播放按钮
├─┬ ControlBar 控制条
│ ├── PlayToggle 播放切换
│ ├── VolumeMenuButton 声音菜单按钮
│ ├── CurrentTimeDisplay (hidden by default) 当前播放时间
│ ├── TimeDivider (hidden by default) 时间分割器
│ ├── DurationDisplay (hidden by default) 持续播放时间
│ ├─┬ ProgressControl (hidden during live playback) 进度条控制
│ │ └─┬ SeekBar 拖动条
│ │ ├── LoadProgressBar 加载进度条
│ │ ├── MouseTimeDisplay 鼠标时间显示
│ │ └── PlayProgressBar 播放进度条
│ ├── LiveDisplay (hidden during VOD playback) 直播显示
│ ├── RemainingTimeDisplay 剩余时间
│ ├── CustomControlSpacer (has no UI) 自定义控制间隔
│ ├── PlaybackRateMenuButton (hidden, unless playback tech supports rate changes) 播放速率菜单按钮(隐藏,除非回放技术支持速率变化)
│ ├── ChaptersButton (hidden, unless there are relevant tracks) 章节按钮(隐藏,除非有相关轨道)
│ ├── DescriptionsButton (hidden, unless there are relevant tracks) 说明按钮(隐藏,除非有相关轨道)
│ ├── SubtitlesButton (hidden, unless there are relevant tracks) 字幕按钮
│ ├── CaptionsButton (hidden, unless there are relevant tracks) 标题按钮
│ ├── AudioTrackButton (hidden, unless there are relevant tracks) 音频轨道按钮
│ └── FullscreenToggle 全屏切换
├── ErrorDisplay (hidden, until there is an error) 错误(隐藏,直到发生错误)
└── TextTrackSettings 文本轨道设置
特定组件详情
Volume Panel
VolumePanel包括MuteToggle和VolumeControl组件,如果不支持音量更改,它将被隐藏。 VolumePanel有一个重要选项,可以使您的VolumeControl垂直显示在MuteToggle上。 这可以通过传递VolumePanel {inline:false}来设置,因为默认行为是具有{inline:true}的水平VolumeControl。
垂直 VolumeControl的示例
let player = videojs('myplayer', {
controlBar: {
volumePanel: {
inline: false
Text Track Settings
文本轨道设置组件仅在使用模拟文本轨道时可用。