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 相关文章推荐
百度留言本js 大家可以参考下
Oct 13 Javascript
javascript 定义新对象方法
Feb 20 Javascript
javascript学习笔记(三)显示当时时间的代码
Apr 08 Javascript
为EasyUI的Tab标签添加右键菜单的方法
Jul 14 Javascript
JS实现点击下载的小例子
Jul 10 Javascript
往光标所在位置插入值的js代码
Sep 22 Javascript
JS 弹出层 定位至屏幕居中示例
May 21 Javascript
JavaScript表单验证实例之验证表单项是否为空
Jan 10 Javascript
基于KO+BootStrap+MVC实现的分页控件代码分享
Nov 07 Javascript
详解webpack 配合babel 将es6转成es5 超简单实例
May 02 Javascript
jquery+css实现下拉列表功能
Sep 03 jQuery
Koa代理Http请求的示例代码
Oct 10 Javascript
手把手教你如何编译打包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用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法
2015/11/11 PHP
thinkPHP5框架设置404、403等http状态页面的方法
2018/06/05 PHP
PHP创建XML的方法示例【基于DOMDocument类及SimpleXMLElement类】
2019/09/10 PHP
jquery 模式对话框终极版实现代码
2009/09/28 Javascript
如何用js控制frame的隐藏或显示的解决办法
2013/03/20 Javascript
js实现点小图看大图效果的思路及示例代码
2013/10/28 Javascript
js和css写一个可以自动隐藏的悬浮框
2014/03/05 Javascript
JavaScript和CSS交互的方法汇总
2014/12/02 Javascript
node.js中的fs.lchmodSync方法使用说明
2014/12/16 Javascript
json实现前后台的相互传值详解
2015/01/05 Javascript
jQuery验证元素是否为空的两种常用方法
2015/03/17 Javascript
原生js三级联动的简单实现代码
2016/06/07 Javascript
jQuery实现三级联动效果
2017/03/02 Javascript
vue2.0获取自定义属性的值
2017/03/28 Javascript
vue.js的vue-cli脚手架中使用百度地图API的实例
2019/01/21 Javascript
JavaScript遍历DOM元素的常见方式示例
2019/02/16 Javascript
vue路由导航守卫和请求拦截以及基于node的token认证的方法
2019/04/07 Javascript
了解JavaScript函数中的默认参数
2019/05/30 Javascript
vue项目中锚点定位替代方式
2019/11/13 Javascript
Python的“二维”字典 (two-dimension dictionary)定义与实现方法
2016/04/27 Python
pycharm下查看python的变量类型和变量内容的方法
2018/06/26 Python
python绘制散点图并标记序号的方法
2018/12/11 Python
python对矩阵进行转置的2种处理方法
2019/07/17 Python
python实现画出e指数函数的图像
2019/11/21 Python
简单了解Python读取大文件代码实例
2019/12/18 Python
Python猴子补丁Monkey Patch用法实例解析
2020/03/23 Python
关于Python3爬虫利器Appium的安装步骤
2020/07/29 Python
django前端页面下拉选择框默认值设置方式
2020/08/09 Python
任意一块网页内容实现“活”的背景(目前火狐浏览器专有)
2014/05/07 HTML / CSS
CSS3 中filter(滤镜)属性使用详解
2020/04/07 HTML / CSS
领导班子遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
对外汉语专业大学生职业生涯规划书
2014/10/11 职场文书
2015年幼儿园新年寄语
2014/12/08 职场文书
大学生村官入党自传
2015/06/26 职场文书
教你如何使用Python Tkinter库制作记事本
2021/06/10 Python
Nginx设置HTTPS的方法步骤 443证书配置方法
2022/03/21 Servers