首页 文章

Video.js:通过插件向控制栏添加菜单

提问于
浏览
1

我'm trying to a menu to the control bar of a video.js player via a plugin. Here'是我最终目标的demo . 问题是该演示是在video.js本身的控制栏中添加一个菜单,而我想要一个添加菜单的插件 .

到目前为止,我已经能够创建一个插件,将 MenuButton 添加到控制栏,但我无法使用任何菜单项填充菜单 .

这是我现在所处的位置demo .

问题是当我尝试用 new videojs.PlaybackRateMenuItem(this, {rate: rates[i] + 'x'}) 创建一个新的 PlaybackRateMenuItem 对象时 . JS控制台在 video.dev.js 的第805行引发以下错误:

Uncaught TypeError: Cannot read property 'guid' of undefined

这对应于未分类版本中的以下功能:

vjs.bind = function(context, fn, uid) {
    // Make sure the function has a unique ID
    if (!fn.guid) {
        fn.guid = vjs.guid++;
    }

    ... omitted ...
};

或者更具体地说,这一行: if (!fn.guid) { .

从调试器中逐步执行,我看到 fn 作为 undefined 传入,函数的调用者是:

vjs.bind(this.player(), this.player().reportUserActivity);

当调用此函数时, this.player() 返回一个定义的值,但是一旦 vjs.bind 被调用,两个参数都将变为未定义,我不知道为什么 . 任何想法或正确方向的观点?谢谢!

1 回答

  • 0

    结果我在这里遇到了两个主要问题 .

    • 为我的扩展 videojs.MenuButton 类的类重写 createMenu 方法而不是 createItems 方法 .

    • videojs.MenuItem 类的构造函数的 this 参数必须是videojs player对象,而不仅仅是 this . 问题是这个对象的名称在video.js的缩小版本中被破坏了 . 对于这种情况,我发现使用 this.c 是播放器对象,但总的来说,我发现使用未经授权的版本 video.dev.js 更容易,而不必处理名称修改 . 在这种情况下,使用 this.player_ 是正确的 .

相关问题