这次给大家带来vue-video-player做出一个自定义播放器,vue-video-player做出自定义播放器的注意事项有哪些,下面就是实战案例,一起来看一下。

图1--显示侧边栏

图2-收起侧边栏;

图三:全屏。

写在前面

本次项目中需要用到vue,vue-video-player,我用的是iview的ui框架,但是ui框架无妨,这里关注的是基于video.js开发的vue-video-player的使用,以及如何操作video.js中的api。

vue-video-player 项目地址:https://github.com/surmon-china/vue-video-player。

video.js文档地址:http://docs.videojs.com/docs/api/player.html。

项目目录:

一、外层ui布局

图一中可以看到,本次项目使用的是两栏自适应布局,其中,右侧为播放列表,固定宽度500px,左边是播放器box,播放列表box可根据手柄点击展开或收起,而播放器box也跟随播放列表的展开/收缩进行宽度自适应。

(因录制动画太大传不上,可clone我的程序下来运行可见)。

html代码结构如此:

收缩展开的时候加上一个过度动画,这里选择使用css手写动画:[css] view plain copy

.transition{

transition: all 1s ease;

-moz-transition: all 1s ease;

-webkit-transition: all 1s ease;

-o-transition: all 1s ease;

}

[css] view plain copy

.toLeft{

.transition;

margin-right: 540px !important;

}

.toRight{

.transition;

margin-right: 40px !important;

}

.toHide{

.transition;

right: -500px !important;

}

.toShow{

.transition;

right: 0px !important;

}

[css] view plain copy

// 播放区

.player-box{

margin-right: 540px;

height: 100%;

position: relative;

}

[css] view plain copy

//侧边信息区

.info-box{

width: 520px;

height: 100%;

background: transparent;

position: relative;

overflow: hidden;

[css] view plain copy

// 内容区

.content{

background: #292929;

position: relative;

padding: 20px 0 20px 20px;

}

二、播放器ui

整个自定义的播放器ui封装成了一个组件--CostomVedio.vue,播放区使用的是vue-video-player的播放器,但是底部控制栏是自定义的,不使用播放器自带的controlBar,通常通用的这些都不符合设计哥哥的要求,所以我们需要自定义播放器UI。

html结构代码如下:[html] view plain copy

ref="videoPlayer"

:options="playerOptions"

:playsinline="true"

customEventName="customstatechangedeventname"

@play="onPlayerPlay($event)"

@pause="onPlayerPause($event)"

@ended="onPlayerEnded($event)"

@waiting="onPlayerWaiting($event)"

@playing="onPlayerPlaying($event)"

@loadeddata="onPlayerLoadeddata($event)"

@timeupdate="onPlayerTimeupdate($event)"

@statechanged="playerStateChanged($event)"

@ready="playerReadied"

>

{{playerCtrl.currentTime}}/{{playerCtrl.duration}}

具体思路就是,使用播放器铺满播放区,使用position定位将自定义的controlBar固定在播放区的底部,这里注意controlBar的z-index一定要足够大,否则在全屏的时候不在最上层看不到。

css样式:[css] view plain copy

.video-player-box{

height: 100% !important;

width: 100% !important;

}

//底部进度条

.bottomCtrl{

line-height: 60px;

height: 60px;

overflow: visible;

position: absolute;

bottom: 0;

left: 0;

background-color: rgba(45, 45, 45, .92);

width: 100%;

padding: 0 50px;

color: #fff;

z-index: 999999999999999;

.icon{

font-size: 16px;

line-height: 60px;

cursor: pointer;

}

.icon+.icon{

margin-left: 20px;

}

}

.custom-video-outer-box{

position: relative;

height: 100%;

width: 100%;

}

.progress-slider{

position: absolute;

width: 100%;

top: 0;

left: 0;

height: 18px;

line-height: 18px;

.ivu-slider-wrap{

margin: 0 !important;

border-radius: 0 !important;

}

.ivu-slider-button-wrap{

line-height: normal !important;

}

.ivu-slider-button{

height: 8px !important;

width: 8px !important;

}

}

.voice-box{

.voice-slider{

width: 100px;

margin-left: 20px;

}

.ivu-slider-wrap{

margin: 27px 0 !important;

}

}

.time{

margin-left: 25px;

}

.full-screen{

margin-left: 25px;

line-height: 60px;

}

.ivu-progress-outer{

padding: 0 10px !important;

}

.vjs-big-play-button{

height: 80px !important;

width: 80px !important;

line-height: 80px !important;

text-align: center;

background:rgba(0, 0, 0, 0.8) !important;

border-radius: 50% !important;

top: 50% !important;

left: 50% !important;

margin-left: -40px !important;

margin-top: -40px !important;

}

#vjs_video_3{

max-height: 100% !important;

width: 100% !important;

height: 100% !important;

}

.video-player-box>p{

height: 100% !important;

width: 100% !important;

}

.video-js .vjs-big-play-button{

font-size: 5em !important;

}

video{

max-height: 100% !important;

}

三、实现自定义controlBar功能

接下来就是实现自定义controlBar的功能,如播放,暂停,下一曲,播放进度,剩余时间,全屏,音量调节等。

这里我们肯定要先看video.js的相应api了,虽然是英文的但是上边写的很清楚,很容易看明白。

video.js api文档地址:http://docs.videojs.com/docs/api/player.html

1. 播放,暂停,下一曲,全屏主要就是监听我们添加的自定义按钮click事件,然后调用播放器API执行相应操作,并改变状态。[javascript] view plain copy

// 播放

play(){

this.player.play();

},

// 暂停

pause(){

this.player.pause();

},

//下一曲

nextClick(){

console.log("自定义","下一曲点击");

},

//全屏

fullScreenHandle(){

console.log("全屏");

if(!this.player.isFullscreen()){

this.player.requestFullscreen();

this.player.isFullscreen(true);

}else{

this.player.exitFullscreen();

this.player.isFullscreen(false);

}

},

当然,在vue-video-player中的播放器会在回调方法中监听状态的变化:[html] view plain copy

ref="videoPlayer"

:options="playerOptions"

:playsinline="true"

customEventName="customstatechangedeventname"

@play="onPlayerPlay($event)"

@pause="onPlayerPause($event)"

@ended="onPlayerEnded($event)"

@waiting="onPlayerWaiting($event)"

@playing="onPlayerPlaying($event)"

@loadeddata="onPlayerLoadeddata($event)"

@timeupdate="onPlayerTimeupdate($event)"

@statechanged="playerStateChanged($event)"

@ready="playerReadied">

我们可以根据这些状态变化,相应的改变我们的UI,比如播放时显示“暂停”按钮,暂停时显示“播放”等功能。

2.播放进度,剩余时间,音量调节

播放进度的话是根据在播放器onPlayerTimeupdate()回调方法中,通过currentTime这个方法来获取当前播放的进度时间,单位S,因为这里我使用的是slider,进度都是整数计算,所以这里我需要两个变量存放,一个是整数形式,另一个是格式化好时分秒之后的string形式,用以显示。[javascript] view plain copy

//时间更新

onPlayerTimeupdate(player){

this.playerCtrl.currentTime=timeUtil.secondToDate(player.currentTime());

this.playerCtrl.currentTimeInt=Math.floor(player.currentTime());

console.log("当前音量",player.volume());

},

定点播放,即用户点击进度条某个地方,即可在这个点进度播放,使用的是slider的

[html] view plain copy

@on-change="progressChange"

这个方法监听slider定点,[javascript] view plain copy

//进度条被拉动

progressChange(val){

this.player.currentTime(val);

this.playerCtrl.currentTimeInt=val;

this.playerCtrl.currentTime=timeUtil.secondToDate(val);

},

拿到定点的值,然后通过player的currentTime设置跳到定点播放。

音量调节的做法跟播放进度相似:

一开始初始化的时候记得配置[javascript] view plain copy

muted:false,//开始声音

来开启声音,否则静音状态下调节声音无效。

使用player.volume(val)这个api设置音量,其中val=0,表示声音off,val=1表示声音最大,0.5表示声音设置在half。

四:总结

最后在app.vue/需要用到这个播放器的地方 引入自定义播放器组件即可。vue-video-player是大神基于video.js开发的适用于vue.js框架的组件,具有良好兼容性,所以我们在vue中使用这个播放器组件本质还是使用video.js,我们要更多的去了解video.js中的api并使用他。

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

videos player.php_vue-video-player做出一个自定义播放器相关推荐

  1. 实现一个自定义播放器UI

    1.首先需要画一个播放器UI,用简单的CSS就可以实现. 2.需要熟悉常用的播放器事件. 3.需要把我们自己的UI和播放器事件连接起来. *想让视频第一时间加载出来,目标:缩短从用户进入页面到播放视频 ...

  2. html全屏播放js,使用html5中video自定义播放器必备知识点总结以及JS全屏API介绍

    一.video的js知识点: controls(控制器).autoplay(自动播放).loop(循环)==video默认的: 自定义播放器中一些JS中提供的方法和属性的记录: 1.play()控制视 ...

  3. 使用videjs+vue2+elementui自定义播放器控件

    一.安装项目所需依赖 videojs依赖: npm install --save-dev video.js elementui依赖(这个图方便就不按需引入了): npm i element-ui -S ...

  4. Achshar Player:把Chrome浏览器当作本地音乐播放器使用

    Chrome是一款优秀的网页浏览器,你有没有想过,它除了能够用来浏览网页之外,还能用来干什么?Achshar Player这个扩展的作者会告诉你,谷歌浏览器还可以完全作为一个音乐播放器使用!拿chro ...

  5. HTML5 video标签,自定义播放器

    video标签: video常用的属性: controls 不写controls视频不会播放 属性规定浏览器应该为视频提供播放控件(暂停 进度条 全屏属性) poster 封皮 路径 autoplay ...

  6. vue-video-player文档_基于vue-video-player自定义播放器的方法

    基于vue-video-player自定义播放器的方法 发布时间:2019-01-07 发布网站:编程之家 编程之家收集整理的这篇文章主要介绍了基于vue-video-player自定义播放器的方法, ...

  7. 使用google开源框架Exoplayer开发自定义播放器

    http://ju.outofmemory.cn/entry/143633 背景: 移动端播放视频的需求如日中天, 最近特此使用google的开源框架Exoplayer来开发Android端的视频播放 ...

  8. 基于 AVPlayer 自定义播放器

    如果我只是简单的播放一个视频,而不需要考虑播放器的界面.iOS9.0 之前使用 MPMoviePlayerController, 或者内部自带一个 view 的 MPMoviePlayerViewCo ...

  9. android自定义播放器按钮,android – 使用exo播放器添加全屏视频按钮

    如果您使用的是SimpleExoPlayerView,则可以自定义播放器的视图,尤其是Control的视图.查看SimpleExoPlayerView的文档: Attributes The follo ...

最新文章

  1. UNIX环境高级编程--第七章
  2. ip地址详解,ip地址各种写法的意义,私有局域网搭建(IPv4)
  3. Manage Jenkins管理界面提示“依赖错误: 部分插件由于缺少依赖无法加载...“问题解决办法
  4. pandas pivot 占比_数据处理进阶pandas入门(十八)
  5. 网站架构相关PPT、文章整理(更新于2009-7-15)
  6. 采用静态配置文件方式实现AOP
  7. java导出服务器已经配置好的excel模板
  8. jmeter java_Jmeter 使用-JAVA请求
  9. 私塾在线 Java架构师在线课程(148讲教程)
  10. 科普:国产芯片、芯片生产设备、通讯标准前世今生(转载)
  11. C语言实践项目:2019年个税计算器
  12. html如何取消页眉页脚设置,jquery web打印 取消 页眉和页脚
  13. java解析sql语句简书,Mybatis原理解析(一)--java.sql数据库操作的基本实现方式
  14. 欧氏空间位姿与变换矩阵的转换
  15. 戴森空气净化器php00使用,戴森空气净化器使用—戴森空气净化器使用方法
  16. FPGA学习笔记(2020.04.24)业精于勤荒于嬉,成于思毁于随
  17. 时间戳转换、BASE64和MD5加解密、秒表、图片进行BASE64转换离线使用小工具
  18. UE4 手电筒射线检测
  19. 【CVPR 2020】我的CVPR2020
  20. Variable is not assignable (missing__block type specifier)

热门文章

  1. axure中的拐弯箭头_Axure之幼儿养成记---标记元件中页面快照、水平箭头、垂直箭头、便签、圆形和水滴标记...
  2. python开源web项目-30 个惊艳的Python开源项目
  3. Excel 如何批量导出所有图片
  4. FP6601Q工作设计指南(AC-DC / DC-DC)
  5. js 截取文件后缀名
  6. U盘启动盘安装系统,使用Diskpart命令对磁盘进行分区
  7. CSS简单的交互动效
  8. 技术干货 | 一文弄懂差分隐私原理!
  9. 【Axure教程】能增删改数据的动态饼图
  10. AXURE教程:散点图