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 24小时弹出一次的代码(利用cookies)
Sep 03 Javascript
javascript 上下banner替换具体实现
Nov 14 Javascript
JS获取节点的兄弟,父级,子级元素的方法
Jan 09 Javascript
Javascript刷新窗口方法小结
Oct 21 Javascript
基于JavaScript代码实现pc与手机之间的跳转
Dec 23 Javascript
js获取新浪天气接口的实现代码
Jun 06 Javascript
原生js实现焦点轮播图效果
Jan 12 Javascript
Vue中添加过渡效果的方法
Mar 16 Javascript
跨域请求两种方法 jsonp和cors的实现
Nov 11 Javascript
vue设置一开始进入的页面教程
Oct 28 Javascript
Javascript节流函数throttle和防抖函数debounce
Dec 03 Javascript
jQuery使用hide()、toggle()函数实现相机品牌展示隐藏功能
Jan 29 jQuery
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 函数中静态变量使用的问题实例分析
2020/03/05 PHP
js实现透明度渐变效果的方法
2015/04/10 Javascript
JavaScript中的bold()方法使用详解
2015/06/08 Javascript
JavaScript中使用数组方法汇总
2016/02/16 Javascript
jQuery实现动态文字搜索功能
2017/01/05 Javascript
js转换对象为xml
2017/02/17 Javascript
深入理解AngularJs-scope的脏检查(一)
2017/06/19 Javascript
js CSS3实现卡牌旋转切换效果
2017/07/04 Javascript
在ABP框架中使用BootstrapTable组件的方法
2017/07/31 Javascript
node.js 用socket实现聊天的示例代码
2017/10/17 Javascript
jQuery实现动态显示select下拉列表数据的方法
2018/02/05 jQuery
vue-router启用history模式下的开发及非根目录部署方法
2018/12/23 Javascript
javascript防抖函数debounce详解
2019/06/11 Javascript
js实现登录拖拽窗口
2020/02/10 Javascript
用Python给文本创立向量空间模型的教程
2015/04/23 Python
Python+Opencv识别两张相似图片
2020/03/23 Python
python分析作业提交情况
2017/11/22 Python
python如何让类支持比较运算
2018/03/20 Python
django的autoreload机制实现
2020/06/03 Python
python函数超时自动退出的实操方法
2020/12/28 Python
使用css3制作登录表单的步骤
2014/04/07 HTML / CSS
全球立体声:World Wide Stereo
2018/09/29 全球购物
锐步英国官网:Reebok英国
2019/11/29 全球购物
宣传策划类求职信范文
2014/01/31 职场文书
《三袋麦子》教学反思
2014/03/02 职场文书
客户答谢会致辞
2015/01/20 职场文书
综合测评自我评价
2015/03/06 职场文书
新闻稿标题
2015/07/18 职场文书
初中班主任工作随笔
2015/08/15 职场文书
2016年综治宣传月活动宣传标语口号
2016/03/16 职场文书
入党心得体会
2019/06/20 职场文书
Python Pandas常用函数方法总结
2021/06/15 Python
Python 实现Mac 屏幕截图详解
2021/10/05 Python
分享五个Node.js开发的优秀实践 
2022/04/07 NodeJs
在Oracle表中进行关键词搜索的过程
2022/06/10 Oracle
CSS 实现角标效果的完整代码
2022/06/28 HTML / CSS