如何在版本5中访问videojs.SeekBar和ControlBar?

时间:2015-10-28 11:10:13

标签: javascript video.js

我想将this plugin移植到新的videojs版本5.我更新了大部分插件以适应新的videojs.extend()要求并更新了公共函数声明。

我试图将新组件加载到videojs中的部分:

 //Range Slider Time Bar
 videojs.SeekBar.prototype.options_.children.RSTimeBar = {};
 //Panel with the time of the range slider
 videojs.ControlBar.prototype.options_.children.ControlTimePanel = {}; 

如果我理解正确(我有一些疑问),它会扩展videojs的特定部分以包含插件组件。

问题是videojs.SeekBarvideojs.ControlBar未定义,我不知道在v5中访问它们的正确方法(或者如果它不是,则创建这些空对象)你怎么做的videojs wiki文章中没有任何迹象" 5.0 changes details"

The full code is available here.。有缺陷的线是421和422

修改

如果我用以下代码替换这些行,我可以摆脱错误:

videojs.getComponent("SeekBar").prototype.options_.children.RSTimeBar = {}; //Range Slider Time Bar
videojs.getComponent("ControlBar").prototype.options_.children.ControlTimePanel = {}; //Panel with the time of the range slider

但是在插件构造函数中,我无法找回组件:

  //components of the plugin
  var controlBar = player.controlBar;
  var seekBar = controlBar.progressControl.seekBar;
  this.components.RSTimeBar = seekBar.RSTimeBar; //is undefined

当我探索videoJs对象时,在我的调试器中,我确实可以找到player.controlBar.progressControl.seekBar,但除了RSTimebar之外,它没有名为options_.children的子对象。它是有道理的,因为它是我定义它的地方。但是,我不知道为什么在版本4中我可以找到它而不是版本5.

编辑2

我注意到RSTimebar数组中的options_.children作为对象而不是一对索引/字符串插入。所以我改变了我的界限:

    videojs.getComponent("SeekBar").prototype.options_.children.push("RSTimeBar"); //Range Slider Time Bar
videojs.getComponent("ControlBar").prototype.options_.children.push("ControlTimePanel"); //Panel with the time of the range slider

结果:插件已正确加载,每个组件都有一个警告:

  

VIDEOJS:警告:RSTimeBar组件已添加到videojs对象中   什么时候应该使用videojs.registerComponent(name,   组分)

我只需要找出正确加载组件的正确和最简单的方法。

1 个答案:

答案 0 :(得分:1)

我终于设法更新了插件,感谢a commit,其中大部分工作已完成。