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 相关文章推荐
如何用js控制css中的float的代码
Aug 16 Javascript
JSON JQUERY模板实现说明
Jul 03 Javascript
JavaScript格式化数字的函数代码
Nov 30 Javascript
Wordpress ThickBox 添加“查看原图”效果代码
Dec 11 Javascript
jQuery.query.js 取参数的两点问题分析
Aug 06 Javascript
JSP跨iframe如何传递参数实现代码
Sep 21 Javascript
jQuery插件实现表格隔行变色及鼠标滑过高亮显示效果代码
Feb 25 Javascript
jQuery select自动选中功能实现方法分析
Nov 28 Javascript
关于前后端json数据的发送与接收详解
Jul 30 Javascript
详解小程序原生使用ES7 async/await语法
Aug 06 Javascript
JS实现的简单分页功能示例
Aug 23 Javascript
vue+django实现下载文件的示例
Mar 24 Vue.js
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管理依赖(dependency)关系工具 Composer 安装与使用
2014/08/18 PHP
PHP实现通过Luhn算法校验信用卡卡号是否有效
2015/03/23 PHP
php计算一个文件大小的方法
2015/03/30 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
JavaScript语法着色引擎(demo及打包文件下载)
2007/06/13 Javascript
修改jquery里的dialog对话框插件为框架页(iframe) 的方法
2010/09/14 Javascript
Js实现自定义右键行为
2015/03/26 Javascript
Javascript技术栈中的四种依赖注入小结
2016/02/27 Javascript
模板视图和AngularJS之间冲突的解决方法
2016/11/22 Javascript
BootStrap Tooltip插件源码解析
2016/12/27 Javascript
React 无状态组件(Stateless Component) 与高阶组件
2018/08/14 Javascript
对vux点击事件的优化详解
2018/08/28 Javascript
vue.js多页面开发环境搭建过程
2019/04/24 Javascript
Vue中实现权限控制的方法示例
2019/06/07 Javascript
layui禁用侧边导航栏点击事件的解决方法
2019/09/25 Javascript
python pdb调试方法分享
2014/01/21 Python
python动态参数用法实例分析
2015/05/25 Python
举例详解Python中threading模块的几个常用方法
2015/06/18 Python
使用Python操作excel文件的实例代码
2017/10/15 Python
pandas按若干个列的组合条件筛选数据的方法
2018/04/11 Python
python验证码图片处理(二值化)
2019/11/01 Python
python文件操作的简单方法总结
2019/11/07 Python
Django框架中间件定义与使用方法案例分析
2019/11/28 Python
Pytorch提取模型特征向量保存至csv的例子
2020/01/03 Python
通过实例了解python__slots__使用方法
2020/09/14 Python
HTML5中的postMessage API基本使用教程
2016/05/20 HTML / CSS
澳大利亚百货商店中销量第一的商务衬衫品牌:Van Heusen
2018/07/26 全球购物
澳大利亚窗帘商店:Curtain Wonderland
2019/12/01 全球购物
学生党员思想汇报范文
2014/01/09 职场文书
小学毕业家长寄语
2014/01/19 职场文书
公司中层干部的自我评价分享
2014/03/01 职场文书
2014年网络管理员工作总结
2014/12/01 职场文书
工作检讨书怎么写
2015/01/23 职场文书
2015年幼儿园学期工作总结
2015/05/22 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers
redis lua限流算法实现示例
2022/07/15 Redis