【发布时间】:2016-02-24 14:06:24
【问题描述】:
我正在为VideoJS v5 编写一个社交分享插件:我想在控制栏下方的播放器标记中添加一个 div,其中包含几个链接,这些链接将允许在一篇文章中对播放器实例进行社交分享我的网站。我正在使用 ES6。
VideoJS 文档很少,尤其是对于 v5 - 我在源代码中四处寻找,试图弄清楚如何做到这一点。我确实找到了子类化 VideoJS 组件的this example。
这是我到目前为止所得到的 - 如果我犯了风格上的罪行,我深表歉意,我对 VideoJS 插件或 ES6 类没有太多经验。
videojs.plugin('social-share', function(opts) {
let player = this;
const Component = videojs.getComponent('Component');
const ClickableComponent = videojs.getComponent('ClickableComponent');
class VjsShareBar extends Component {
constructor(player, opts) {
super(player, opts);
}
createEl() {
return super.createEl('div', {
className: 'vjs-share-bar video-share share-buttons'
}, {
'role': 'group'
});
}
}
class VjsShareButton extends Component {
constructor(player, opts) {
super(player, opts);
}
createEl() {
return super.createEl('a', {
className: 'share-button'
})
}
}
let twitterShareBtn = new VjsShareButton(player, opts);
twitterShareBtn.addClass('twitter');
let twitterShareIcon = new Component(player, opts);
let fbShareBtn = new VjsShareButton(player, opts);
fbShareBtn.addClass('facebook');
let vjsShareBar = player.addChild(new VjsShareBar(player, opts));
vjsShareBar.addChild(twitterShareBtn);
vjsShareBar.addChild(fbShareBtn);
});
这会将预期元素添加到 video-js 容器内的播放器标记:
<div class="vjs-share-bar video-share share-buttons" role="group">
<a class="share-button twitter"></a>
<a class="share-button facebook"></a>
</div>
我是否需要这种为每个元素扩展新子类的方法?它似乎有点笨拙。有没有一种方法可以简单地为我要创建的每个元素创建一个 VideoJS Component 类的新实例,每次都传入不同的标记名和类?我需要在a 标签中添加跨度,并且为每个标签扩展一个新的Component 子类的想法似乎有点过头了。
(我网站中的现有事件处理程序将处理链接上的点击,因此我不会使用播放器 API 来监听点击事件。我使用简单的 Component 类,因为不希望额外的凹凸更具体的类,如 ClickableComponent 和 Button 添加到标记中。)
【问题讨论】:
标签: javascript class oop ecmascript-6 video.js