video.js添加自定义组件的方法


Posted in Javascript onDecember 09, 2020

videojs虽然已经为我们提供了较为完善的功能.但是在实际应用中,我们仍然可能需要为这个播放器添加部分功能.下面将以添加标题栏为示例简要介绍如何给videojs添加功能或组件.

获取videojs源码

访问videojs在github上的项目即可下载到videojs的源代码
项目网址: https://github.com/videojs/video.js  

源码的编译

使用cmd,在源代码根目录下使用npm run build命令对源码进行打包.
具体的打包编译方法可以点击这里查看
没有错误正常编译后可以得到dist文件夹,里面有编译后的文件.

video.js添加自定义组件的方法

添加TitleBar组件

js代码编写

开发TitleBar源码

// Subclasses Component
import Component from './component.js';
import console from 'global/console';
import videojs from './video.js';



// videojs.extend方法用来实现继承,videojs中大部分组件直接或间接的继承自Component
/**
 * the title bar
 * @extends Component
 */
class TitleBar extends Component {

 // The constructor of a component receives two arguments: the
 // player it will be associated with and an object of options.
 // 这个构造函数接收两个参数:
 // player将被用来关联options中的参数
 /**
 * constructor
 * @param {Player} player the player
 * @param {any} options the options
 */
 constructor(player, options) {
 	//调用父类的构造方法
 super(player, options);

 // 如果在options中传了text属性,那么更新这个组件的文字显示
 if (options.text) {
  this.updateTextContent(options.text);
 }
 }

 // The `createEl` function of a component creates its DOM element.
 // 创建一个DOM元素
 /**
 * creatEl
 * @returns {*} zzf add
 */
 createEl() {
 return super.createEl('div', {

  // Prefixing classes of elements within a player with "vjs-"
  // is a convention used in Video.js.
  // 给元素加vjs-开头的样式名
  className: 'vjs-title-bar'
 });
 }

 /**
 * 设置标题
 * @param {String} text the title
 */
 updateTextContent(text) {
 // 如果options中没有提供text属性,默认显示为空
 if (typeof text !== 'string') {
  text = ' ';
 }

 // Use Video.js utility DOM methods to manipulate the content
 // of the component's element.
 // 使用Video.js提供的DOM方法来操作组件元素
 videojs.dom.emptyEl(this.el());
 videojs.dom.appendContent(this.el(), text);
 }

 /**
 * build css class
 * @returns {string} the class
 */
 buildCSSClass() {
 return 'vjs-title-bar';
 }

 /**
 * when the languagechange
 */
 handleLanguagechange() {
 }
}

TitleBar.prototype.controlText_ = 'title-bar';
// Register the component with Component, so it can be used in players.
// 在component中注册这个组件,才可以使用
Component.registerComponent('TitleBar', TitleBar);
export default TitleBar;

需要注意的是,TitleBar应继承Component,并且在构造方法中应先调用父类的构造方法.
同时,需要调用Component.registerComponent()方法注册组件.

在player里注册自定义组件

打开player.js文件,在图中的地方import自己的组件即可.videojs初始化时会自动进行注册

video.js添加自定义组件的方法

添加css样式

在title-bar.js文件中,buildCSSClass方法中声明了titleBar的css样式为vjs-title-bar,故在css样式中末尾添加如下css代码

/** title bar默认样式 */
.video-js .vjs-title-bar {
 color: white;
 font-size: 2em;
 padding: .5em;
 position: absolute;
 top: 0;
 left:10%;
 min-width: 80px;
 height: 40px;
 line-height: 40px;
}

.vjs-has-started .vjs-title-bar {
 display: flex;
 visibility: visible;
 opacity: 1;
 transition: visibility 0.1s, opacity 0.1s;
}
/* 用户不活动时设计title bar自动隐藏 */
.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-title-bar {
 visibility: visible;
 /*visibility: hidden;*/
 opacity: 0;
 transition: visibility 1s, opacity 1s;
}

.vjs-controls-disabled .vjs-title-bar,
.vjs-using-native-controls .vjs-title-bar,
.vjs-error .vjs-title-bar {
 display: none !important;
}

.vjs-audio.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-title-bar {
 opacity: 0;
 visibility: visible;
 /*visibility: hidden;*/
}

.vjs-has-started.vjs-no-flex .vjs-title-bar {
 display: table;
}

通过npm打包生成的css样式文件可能存在问题,可以访问http://vjs.zencdn.net/7.11/video-js.css将官方的css文件复制到本地,并在末尾添加自己需要的css样式代码

应用自己的组件

 重新编译

与之前编译方式一样,在源代码目录下使用npm run build命令进行编译

在html中调用组件

编写一个简单的html网页进行测试

<!DOCTYPE html>
<html lang="en">
<head>

 <title>Video.js | HTML5 Video Player</title>
 <!--引用本地样式文件 -->
 <link href="C:\Users\KKFORKK\Desktop\example\docs\copycss.css" rel="external nofollow" rel="stylesheet">
 <!--引用编译后的js文件-->
 <script src="C:\Users\KKFORKK\Desktop\example\dist\video.min.js"></script>
</head>
<body>

 <video id="example_video_1" class="video-js" controls preload="none" width="1024" height="768" 
 poster="D:/pixiv/1605679254116.jpg" >

 <p class="vjs-no-js">To view this video please enable JavaScript, and consider upgrading to a web 
  browser that <a href="https://videojs.com/html5-video-support/" rel="external nofollow" target="_blank">
  supports HTML5 video</a></p>
 </video>
<script>
 //获取video元素并进行配置
 var player = videojs('example_video_1', {
  inactivityTimeout: 2000,
  //启用titleBar组件,并设置text
  TitleBar: {
  'text':'000'
  },
  sourcesOrder:true,
  controls: true, // 是否显示控制条
  preload: 'auto',
  autoplay: false,
  language: 'zh-CN', // 设置语言
  muted: false, // 是否静音
  controlBar: { // 设置控制条组件
  /* 使用children的形式可以控制每一个控件的位置,以及显示与否 */
  children: [
   {name: 'playToggle'}, // 播放按钮
   {name: 'currentTimeDisplay'}, // 当前已播放时间
   {name: 'progressControl'}, // 播放进度条
   {name: 'durationDisplay'}, // 总时间
   {name: 'audioTrackButton'},
   { // 倍数播放
   name: 'playbackRateMenuButton',
   'playbackRates': [0.5, 1, 1.5, 2, 2.5]
   },
   {
   name: 'volumePanel', // 音量控制
   inline: false, // 不使用水平方式
   },
   {name: 'FullscreenToggle'} // 全屏

  ]
  },
  sources:[ // 视频源,这里选择的是音频
   {	
				//资源
    src: 'D:/Music/Aimer - DAWN.mp3',
    type: 'audio/mp3',	//资源类型
    poster: 'D:/pixiv/1605679254116.jpg',
   }
  ]
  }, function (){
  console.log('视频可以播放了',this);
  });
 </script> 
</body>

</html>

实际效果

浏览器显示效果如图,可以看到标题正常显示了

video.js添加自定义组件的方法

同时,标题也可以和control-bar一样在用户不活动时自动隐藏

结语

通过为videojs开发titleBar组件,介绍了简单的组件开发过程.
后续将继续介绍control-bar组件的开发方法,以及组件点击事件和监听器的使用.

到此这篇关于videojs添加自定义组件的方法的文章就介绍到这了,更多相关videojs添加自定义组件内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JQuery扩展插件Validate 2通过参数设置验证规则
Sep 05 Javascript
基于jQuery的输入框在光标位置插入内容, 并选中
Oct 29 Javascript
eclipse如何忽略js文件报错(附图)
Oct 30 Javascript
一个js导致的jquery失效问题的解决方法
Nov 27 Javascript
网页中表单按回车就自动提交的问题的解决方案
Nov 03 Javascript
vue插件tab选项卡使用小结
Oct 27 Javascript
微信小程序 自己制作小组件实例详解
Dec 22 Javascript
详解node.js搭建代理服务器请求数据
Apr 08 Javascript
详解Vue webapp项目通过HBulider打包原生APP
Jun 29 Javascript
Vue中的v-for循环key属性注意事项小结
Aug 12 Javascript
angular中如何绑定iframe中src的方法
Feb 01 Javascript
基于JavaScript或jQuery实现网站夜间/高亮模式
May 30 jQuery
手把手教你如何编译打包video.js
Dec 09 #Javascript
ES6 十大特性简介
Dec 09 #Javascript
Js实现粘贴上传图片的原理及示例
Dec 09 #Javascript
再也不怕 JavaScript 报错了,怎么看怎么处理都在这儿
Dec 09 #Javascript
使用typescript快速开发一个cli的实现示例
Dec 09 #Javascript
ES6中的类(Class)示例详解
Dec 09 #Javascript
JavaScript实现表单验证功能
Dec 09 #Javascript
You might like
php截取中文字符串不乱码的方法
2013/12/25 PHP
PHP随机数 C扩展随机数
2016/05/04 PHP
PHP中的日期时间处理利器实例(Carbon)
2017/06/09 PHP
php+ajax实现异步上传文件或图片功能
2017/07/18 PHP
thinkPHP通用控制器实现方法示例
2017/11/23 PHP
IE innerHTML,outerHTML所引起的问题
2009/06/04 Javascript
jquery对表单操作2
2011/04/06 Javascript
jQuery切换网页皮肤并保存到Cookie示例代码
2014/06/16 Javascript
AngularJS基础 ng-mousemove 指令简单示例
2016/08/02 Javascript
IE8兼容Jquery.validate.js的问题
2016/12/01 Javascript
vue 表单输入格式化中文输入法异常问题
2018/05/30 Javascript
如何使用electron-builder及electron-updater给项目配置自动更新
2018/12/24 Javascript
javascript自定义右键菜单插件
2019/12/16 Javascript
node使用request请求的方法
2019/12/20 Javascript
Vue状态模式实现窗口停靠功能(灵动、自由, 管理后台Admin界面)
2020/03/06 Javascript
为react组件库添加typescript类型提示的方法
2020/06/15 Javascript
JS绘图Flot如何实现可选显示曲线图功能
2020/10/16 Javascript
[16:21]教你分分钟做大人:圣堂刺客
2014/12/03 DOTA
[13:16]INFAMOUS vs VGJ T BO3
2018/06/07 DOTA
python实现类似ftp传输文件的网络程序示例
2014/04/08 Python
Windows下PyMongo下载及安装教程
2015/04/27 Python
Python自动扫雷实现方法
2015/07/25 Python
python数据结构之线性表的顺序存储结构
2018/09/28 Python
深入了解Python iter() 方法的用法
2019/07/11 Python
python 如何调用远程接口
2020/09/11 Python
Python爬取微信小程序Charles实现过程图解
2020/09/29 Python
html5 canvas实现给图片添加平铺水印
2019/08/20 HTML / CSS
Pretty Little Thing美国:时尚女性服饰
2018/08/27 全球购物
师范生自荐信
2013/10/27 职场文书
求职简历自我评价范文
2015/03/10 职场文书
女性励志书籍推荐
2019/08/19 职场文书
数据库连接池
2021/04/06 MySQL
简述Java中throw-throws异常抛出
2021/08/07 Java/Android
Python机器学习应用之基于线性判别模型的分类篇详解
2022/01/18 Python
java后台调用接口及处理跨域问题的解决
2022/03/24 Java/Android
使用vuex-persistedstate本地存储vuex
2022/04/29 Vue.js