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 相关文章推荐
一款JavaScript压缩工具:X2JSCompactor
Jun 13 Javascript
javascript iframe中打开文件,并检测iframe存在否
Dec 28 Javascript
关于用Jquery的height()、width()计算动态插入的IMG标签的宽高的问题
Dec 08 Javascript
用于deeplink的js方法(判断手机是否安装app)
Apr 02 Javascript
纯JS实现旋转图片3D展示效果
Apr 12 Javascript
JavaScript获取URL汇总
Jun 08 Javascript
理解和运用JavaScript的闭包机制
Aug 13 Javascript
利用CSS3在Angular中实现动画
Jan 15 Javascript
jQuery Ajax实现跨域请求
Jan 21 Javascript
微信小程序登录按钮遮罩浮层效果的实现方法
Dec 16 Javascript
Vue脚手架编写试卷页面功能
Mar 17 Javascript
javascript中的offsetWidth、clientWidth、innerWidth及相关属性方法
May 14 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中经典方法实现判断多维数组是否为空
2011/10/23 PHP
phpword插件导出word文件时中文乱码问题处理方案
2014/08/19 PHP
php使用Jpgraph绘制柱形图的方法
2015/06/10 PHP
php并发加锁问题分析与设计代码实例讲解
2021/02/26 PHP
用JavaScript脚本实现Web页面信息交互
2006/10/11 Javascript
jquery tab标签页的制作
2010/05/10 Javascript
javascript实现TreeView 无刷新展开的实例代码
2013/07/13 Javascript
禁止选中文字兼容IE、Chrome、FF等
2013/09/04 Javascript
jQuery实现动画效果circle实例
2015/08/06 Javascript
jquery实现仿新浪微博带动画效果弹出层代码(可关闭、可拖动)
2015/10/12 Javascript
实例详解Nodejs 保存 payload 发送过来的文件
2016/01/14 NodeJs
jquery中键盘事件小结
2016/02/24 Javascript
详解JavaScript 中getElementsByName在IE中的注意事项
2017/02/21 Javascript
JS常见算法详解
2017/02/28 Javascript
JScript实现表格的简单操作
2017/08/15 Javascript
js实现图片放大展示效果
2017/08/30 Javascript
详解React开发必不可少的eslint配置
2018/02/05 Javascript
vue中使用sessionStorage记住密码功能
2018/07/24 Javascript
vue使用v-for实现hover点击效果
2018/09/29 Javascript
Vue+Typescript中在Vue上挂载axios使用时报错问题
2019/08/07 Javascript
vue实现将数据存入vuex中以及从vuex中取出数据
2019/11/08 Javascript
vue+webpack dev本地调试全局样式引用失效的解决方案
2019/11/12 Javascript
JS数组方法concat()用法实例分析
2020/01/18 Javascript
一篇文章带你浅入webpack的DLL优化打包
2020/02/20 Javascript
详解微信小程序工程化探索之webpack实战
2020/04/20 Javascript
[02:39]DOTA2国际邀请赛助威团西雅图第一天
2013/08/08 DOTA
Python实现九宫格式的朋友圈功能内附“马云”朋友圈
2019/05/07 Python
使用celery执行Django串行异步任务的方法步骤
2019/06/06 Python
《孔子拜师》教学反思
2014/02/24 职场文书
总账会计岗位职责
2014/03/13 职场文书
我的求职择业计划书
2014/04/04 职场文书
计划生育标语
2014/06/23 职场文书
军训决心书范文
2015/09/22 职场文书
老干部局2015年度工作总结
2015/10/22 职场文书
php TP5框架生成二维码链接
2021/04/01 PHP
服务器间如何实现文件共享
2022/05/20 Servers