vue-video-player 通过自定义按钮组件实现全屏切换效果【推荐】


Posted in Javascript onAugust 29, 2018

最近公司的产品上线,一些高级功能在基础版本中不对用户开发,通过视频的形式展示。

产品开发用的是 vue, 经同事介绍使用了vue-video-player 视频播放插件,通过 demo 案例很快实现了视频播放效果

vue-video-player 通过自定义按钮组件实现全屏切换效果【推荐】 

<video-player
 class="vjs-custom-skin"
 ref="videoPlayer1"
 :options="playerOptions"
 :playsinline="true"
 :events="events"
 @play="onPlayerPlay($event)"
 @pause="onPlayerPause($event)"
 @ended="onPlayerEnded($event)"
 @loadeddata="onPlayerLoadeddata($event)"
 @waiting="onPlayerWaiting($event)"
 @playing="onPlayerPlaying($event)"
 @timeupdate="onPlayerTimeupdate($event)"
 @canplay="onPlayerCanplay($event)"
 @canplaythrough="onPlayerCanplaythrough($event)"
 @ready="playerReadied"
 @statechanged="playerStateChanged($event)">
</video-player>

老板看了之后说: '不需要全屏切换,不需要让用户看的那么仔细',

通过配置项 controlBar: {fullscreenToggle: false}, 关闭全屏切换后,由于视频标清、展示区域大小 483px X 303px,根本看不清视频里内容,老板又说:"实现全屏不铺满整个屏幕,而是通过固定大小的弹出层展示"

首先想到的是: 开启全屏切换,监听全屏切换的事件,在事件中强制退出全屏,显示固定大小的弹出层

<video-player
 ...
 :events="events"
 @fullscreenchange="onPlayerFullScreenchange($event)"
 ...
>
</video-player>
// 需要在 events 中指定全屏切换事件,不然无法监听
data () {
 return {
  videoDialogVisible: false, // 控制弹出层
  events: ['fullscreenchange']
 }
},
methods: {
 ...
 onPlayerFullScreenchange (player) {
  player.exitFullscreen() //强制退出全屏,恢复正常大小
  this.videoDialogVisible = true
 }
 ...
}

这种办法,虽然能实现,但在强制退出全屏那一下,整个页面会跳一下,碰到网速慢,或电脑卡的情况,效果更差...

没办法,继续想办法,在该插件 GitHub 库中,有网友提过相关 issues , 通过 注册一个自定义按钮组件,添加到播放器的 controlBar中,替换默认的全屏切换按钮

import * as videojs from 'video.js'

export default {
 ...
 methods: {
  ...
  createMyButton () {
   let Button = videojs.getComponent('Button')
   let myButton = videojs.extend(Button, {
    constructor: function (player, options) {
     Button.apply(this, arguments)
     this.addClass('fullscreen-enter')
    },
    handleClick: () => {
     // 绑定点击事件
    },
    buildCSSClass: function () {
     return 'vjs-icon-custombutton vjs-control vjs-button'
    }
   })
   
   //注册
   videojs.registerComponent('myButton', myButton)
   
   this.$nextTick(() => {
    // 添加到controlBar中
    this.$refs.videoPlayer1.player.getChild('controlBar').addChild('myButton')
   })
  }
  ...
 }
}

// 在 style 中指定自定义按钮样式
<style>
.video-js{
  .vjs-control-bar{
  .vjs-icon-custombutton {
   font-family: VideoJS;
   font-weight: normal;
   font-style: normal; }
   .vjs-icon-custombutton:before {
   content: "\f108";
   font-size: 1.8em;
   line-height: 1.67;
   }
  }
 }
}
</style>

自定义的按钮图标用的还是默认的全屏图标,接着得实现按钮的点击事件

页面和弹出层中分别是俩个 播放器实例 videoPlayer1, videoPlayer2,需要考虑到的是:当自定义切换事件触发后,俩个播放器的同步( videoPlayer1播放了10s, 全屏切换后,videoPlayer2得从 10s 继续播放,而不是从头播放 )

onCustombuttonClick () {
 let _time = this.$refs.videoPlayer1.player.currentTime() //已播放时长
 this.$refs.videoPlayer2.player.currentTime(_time)
 this.$refs.videoPlayer2.player.play()
}

同理:关闭弹出层后, 也得把 videoPlayer2 的播放时长 赋值给 videoPlayer1,此处是通过 监听弹出层显示、隐藏等事件来实现

vue-video-player 通过自定义按钮组件实现全屏切换效果【推荐】 

总结

以上所述是小编给大家介绍的vue-video-player 通过自定义按钮组件实现全屏切换效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jQuery 使用手册(三)
Sep 23 Javascript
js获取某元素的class里面的css属性值代码
Jan 16 Javascript
Javascript 拖拽的一些简单的应用(逐行分析代码,让你轻松了拖拽的原理)
Jan 23 Javascript
Javascript从数组中随机取出不同元素的两种方法
Sep 22 Javascript
JavaScript中捕获/阻止捕获、冒泡/阻止冒泡方法
Dec 07 Javascript
利用angularjs1.4制作的简易滑动门效果
Feb 28 Javascript
Javascript实现跨域后台设置拦截的方法详解
Aug 04 Javascript
Node.js实现mysql连接池使用事务自动回收连接的方法示例
Feb 03 Javascript
浅谈对于react-thunk中间件的简单理解
May 01 Javascript
JS html事件冒泡和事件捕获操作示例
May 01 Javascript
详解vue-property-decorator使用手册
Jul 29 Javascript
python实现迭代法求方程组的根过程解析
Nov 25 Javascript
vue-cli3.0使用及部分配置详解
Aug 29 #Javascript
vue2实现搜索结果中的搜索关键字高亮的代码
Aug 29 #Javascript
Vue CLI3 如何支持less的方法示例
Aug 29 #Javascript
Vue实现美团app的影院推荐选座功能【推荐】
Aug 29 #Javascript
Vuex 使用及简单实例(计数器)
Aug 29 #Javascript
浅谈Vue.use的使用
Aug 29 #Javascript
微信小程序支付前端源码
Aug 29 #Javascript
You might like
PHP中通过HTTP_USER_AGENT判断是否为手机移动终端的函数代码
2013/02/14 PHP
从Ajax到JQuery Ajax学习
2007/02/14 Javascript
json格式化/压缩工具 Chrome插件扩展版
2010/05/25 Javascript
javascript学习笔记(九) js对象 设计模式
2012/06/19 Javascript
JS判断客户端是手机还是PC的2个代码
2014/04/12 Javascript
javascript实现俄罗斯方块游戏的思路和方法
2015/04/27 Javascript
js实现仿网易点击弹出提示同时背景变暗效果
2015/08/13 Javascript
学习JavaScript设计模式(接口)
2015/11/26 Javascript
jQuery添加和删除指定标签的方法
2015/12/16 Javascript
实例详解AngularJS实现无限级联动菜单
2016/01/15 Javascript
js对字符串进行编码的方法总结(推荐)
2016/11/10 Javascript
AngularJS报错$apply already in progress的解决方法分析
2017/01/30 Javascript
自定义事件解决重复请求BUG的问题
2017/07/11 Javascript
Vue.js递归组件实现组织架构树和选人功能
2019/07/04 Javascript
JavaScript常用8种数组去重代码实例
2020/09/09 Javascript
原生JS运动实现轮播图
2021/01/02 Javascript
JS中锚点链接点击平滑滚动并自由调整到顶部位置
2021/02/06 Javascript
[00:30]塑造者的传承礼包-戴泽“暗影之焰”套装展示视频
2014/04/04 DOTA
[03:42]2016国际邀请赛中国区预选赛首日现场玩家采访
2016/06/26 DOTA
python爬虫教程之爬取百度贴吧并下载的示例
2014/03/07 Python
Python中apply函数的用法实例教程
2014/07/31 Python
Python with的用法
2014/08/22 Python
python实现输入数字的连续加减方法
2018/06/22 Python
python pandas利用fillna方法实现部分自动填充功能
2020/03/16 Python
Python接口自动化测试的实现
2020/08/28 Python
纽约通行卡:The New York Pass(免费游览纽约90多个景点)
2017/07/29 全球购物
《威尼斯的小艇》教学反思
2014/02/17 职场文书
试用期员工工作自我评价
2014/09/10 职场文书
党员学习群众路线心得体会
2014/11/04 职场文书
先进工作者推荐材料
2014/12/23 职场文书
六年级小学生评语
2014/12/26 职场文书
2015年大学生村官工作总结
2015/04/21 职场文书
合同审查法律意见书
2015/06/04 职场文书
送给火锅店的创意营销方案!
2019/07/08 职场文书
2019开业庆典剪彩仪式主持词!
2019/07/22 职场文书
Java常用工具类汇总 附示例代码
2021/06/26 Java/Android