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下通过replace字符串替换实现大小图片切换
May 22 Javascript
如何使用json在前后台进行数据传输实例介绍
Apr 11 Javascript
基于jQuery选择器的整理集合
Apr 26 Javascript
js重写alert控件(适合学习js的新手朋友)
Aug 24 Javascript
JS取得绝对路径的实现代码
Jan 16 Javascript
Vuejs第六篇之Vuejs与form元素实例解析
Sep 05 Javascript
基于vue2框架的机器人自动回复mini-project实例代码
Jun 13 Javascript
Angular实现类似博客评论的递归显示及获取回复评论的数据
Nov 06 Javascript
详解react-router 4.0 下服务器如何配合BrowserRouter
Dec 29 Javascript
使用Vue实现移动端左滑删除效果附源码
May 16 Javascript
微信小程序渲染性能调优小结
Jul 30 Javascript
vue组件开发之tab切换组件使用详解
Aug 21 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
一些操作和快捷键的理解和讨论
2020/03/04 星际争霸
php 三维饼图的实现代码
2008/09/28 PHP
php从右向左/从左向右截取字符串的实现方法
2011/11/28 PHP
php存储过程调用实例代码
2013/02/03 PHP
PHP数据分析引擎计算余弦相似度算法示例
2017/08/08 PHP
laravel-admin 中列表筛选方法
2019/10/03 PHP
SlideView 图片滑动(扩展/收缩)展示效果
2010/08/01 Javascript
jquery提交form表单时禁止重复提交的方法
2014/02/13 Javascript
JavaScript实现上下浮动的窗口效果代码
2015/10/12 Javascript
jQuery中trigger()与bind()用法分析
2015/12/18 Javascript
全面解析标签页的切换方式
2016/08/21 Javascript
AngularJS通过$location获取及改变当前页面的URL
2016/09/23 Javascript
jQuery如何解决IE输入框不能输入的问题
2016/10/08 Javascript
完美实现js焦点轮播效果(一)
2017/03/07 Javascript
JavaScript中三个等号和两个等号你了解多少
2017/07/04 Javascript
Vue axios 中提交表单数据(含上传文件)
2017/07/06 Javascript
AngularJS自定义过滤器用法经典实例总结
2018/05/17 Javascript
vue 自定义指令自动获取文本框焦点的方法
2018/08/25 Javascript
如何封装了一个vue移动端下拉加载下一页数据的组件
2019/01/06 Javascript
如何在Node和浏览器控制台中打印彩色文字
2020/01/09 Javascript
[36:22]VP vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python及PyCharm下载与安装教程
2017/11/18 Python
python plotly绘制直方图实例详解
2019/07/22 Python
浅析使用Python搭建http服务器
2019/10/27 Python
keras Lambda自定义层实现数据的切片方式,Lambda传参数
2020/06/11 Python
Python pip 常用命令汇总
2020/10/19 Python
python实现视频压缩功能
2020/12/18 Python
凯撒娱乐:Caesars Entertainment
2018/02/23 全球购物
美国知名的旅游网站:OneTravel
2018/10/09 全球购物
毕业生自荐信
2013/12/14 职场文书
销售会计岗位职责
2014/03/15 职场文书
新年晚会主持词
2014/03/24 职场文书
商业项目策划方案
2014/06/05 职场文书
暑期教师培训方案
2014/06/07 职场文书
离婚协议书样本
2015/01/26 职场文书
mysql 获取相邻数据项
2022/05/11 MySQL