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 相关文章推荐
弹出层之1:JQuery.Boxy (一) 使用介绍
Oct 06 Javascript
jQuery之选项卡的简单实现
Feb 28 Javascript
jquery siblings获取同辈元素用法实例分析
Jul 25 Javascript
JS实现的适合做faq或menu滑动效果示例
Nov 17 Javascript
Jquery循环截取字符串的方法(多出的字符串处理成&quot;...&quot;)
Nov 28 Javascript
jQuery模拟实现天猫购物车动画效果实例代码
May 25 jQuery
Bootstrap弹出框(Popover)被挤压的问题小结
Jul 11 Javascript
vue-cli+webpack项目 修改项目名称的方法
Feb 28 Javascript
浅谈javascript中的prototype和__proto__的理解
Apr 07 Javascript
JQuery 实现文件下载的常用方法分析
Oct 29 jQuery
小程序双头slider选择器的实现示例
Mar 31 Javascript
react合成事件与原生事件的相关理解
May 13 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
PHP5 安装方法
2007/01/15 PHP
PHP遍历文件夹与文件类及处理类用法实例
2014/09/23 PHP
CI框架AR数据库操作常用函数总结
2016/11/21 PHP
解决PHP 7编译安装错误:cannot stat ‘phar.phar’: No such file or directory
2017/02/25 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
2019/11/26 PHP
JMenuTab简单使用说明
2008/03/13 Javascript
Jquery cookie操作代码
2010/03/14 Javascript
jquery插件制作 图片走廊 gallery
2012/08/17 Javascript
10分钟学会写Jquery插件实例教程
2014/09/06 Javascript
jquery解决客户端跨域访问问题
2015/01/06 Javascript
jQuery+HTML5美女瀑布流布局实现方法
2015/09/21 Javascript
javascript运动效果实例总结(放大缩小、滑动淡入、滚动)
2016/01/08 Javascript
BootStrap扔进Django里的方法详解
2016/05/13 Javascript
JS 数字转换为大写金额的简单实例
2016/08/04 Javascript
详细总结Javascript中的焦点管理
2016/09/17 Javascript
基于BootstrapValidator的Form表单验证(24)
2016/12/12 Javascript
vue引入ueditor及node后台配置详解
2018/01/03 Javascript
Element-UI中Upload上传文件前端缓存处理示例
2019/02/21 Javascript
vue + typescript + 极验登录验证的实现方法
2019/06/27 Javascript
JavaScript的查询机制LHS和RHS解析
2019/08/16 Javascript
微信小程序跳转到其他网页(外部链接)的实现方法
2019/09/20 Javascript
JavaScript手写数组的常用函数总结
2020/11/22 Javascript
vue 实现图片懒加载功能
2020/12/31 Vue.js
Python中.py文件打包成exe可执行文件详解
2017/03/22 Python
python多进程实现进程间通信实例
2017/11/24 Python
django框架实现模板中获取request 的各种信息示例
2019/07/01 Python
python 三元运算符使用解析
2019/09/16 Python
如何使用Python多线程测试并发漏洞
2019/12/18 Python
Auchan Direct波兰:欧尚在线杂货店
2016/10/19 全球购物
Elemis美国官网:英国的第一豪华护肤品牌
2018/03/15 全球购物
Lookfantastic阿联酋官网:英国知名美妆护肤购物网站
2020/05/26 全球购物
澳大利亚电商Catch新西兰站:Catch.co.nz
2020/05/30 全球购物
机电专业求职信
2014/06/14 职场文书
机关作风建设工作总结
2014/10/23 职场文书
世界文化遗产导游词
2015/02/13 职场文书
创业开店,这样方式更合理
2019/08/26 职场文书