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 $.each() 使用小探
Aug 23 Javascript
js操纵dom生成下拉列表框的方法
Feb 24 Javascript
js获取 type=radio 值的方法
May 09 Javascript
js设置控件的隐藏与显示的两种方法
Aug 21 Javascript
WebSocket+node.js创建即时通信的Web聊天服务器
Aug 08 Javascript
几句话带你理解JS中的this、闭包、原型链
Sep 26 Javascript
微信小程序 开发之快递查询功能的实现
Jan 09 Javascript
详解wow.js中各种特效对应的类名
Sep 13 Javascript
VUE2 前端实现 静态二级省市联动选择select的示例
Feb 09 Javascript
Angular6 写一个简单的Select组件示例
Aug 20 Javascript
js console.log打印对象时属性缺失的解决方法
May 23 Javascript
Vue如何基于vue-i18n实现多国语言兼容
Jul 17 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
世界咖啡生产者论坛呼吁:需要立即就咖啡价格采取认真行动
2021/03/06 咖啡文化
操作Oracle的php类
2006/10/09 PHP
PHP PDO函数库详解
2010/04/27 PHP
simplehtmldom Doc api帮助文档
2012/03/26 PHP
php实现转换html格式为文本格式的方法
2016/05/16 PHP
PHP 文件上传后端处理实用技巧方法
2017/01/06 PHP
Yii2框架实现登录、退出及自动登录功能的方法详解
2017/10/24 PHP
jQuery写fadeTo示例代码
2014/02/21 Javascript
JavaScript AJAX之惰性载入函数
2014/08/27 Javascript
jquery带下拉菜单和焦点图代码分享
2015/08/24 Javascript
基于AngularJS+HTML+Groovy实现登录功能
2016/02/17 Javascript
通过正则表达式获取url中参数的简单实现
2016/06/07 Javascript
Node.js + Redis Sorted Set实现任务队列
2016/09/19 Javascript
自带气泡提示的vue校验插件(vue-verify-pop)
2017/04/07 Javascript
angular+webpack2实战例子
2017/05/23 Javascript
20170918 前端开发周报之JS前端开发必看
2017/09/18 Javascript
js使用xml数据载体实现城市省份二级联动效果
2017/11/08 Javascript
vue安装和使用scss及sass与scss的区别详解
2018/10/15 Javascript
vuejs2.0运用原生js实现简单拖拽元素功能
2020/08/21 Javascript
Nodejs核心模块之net和http的使用详解
2019/04/02 NodeJs
使用scrapy实现爬网站例子和实现网络爬虫(蜘蛛)的步骤
2014/01/23 Python
python访问sqlserver示例
2014/02/10 Python
Python 关于反射和类的特殊成员方法
2017/09/14 Python
Python实现字符串与数组相互转换功能示例
2017/09/22 Python
Python实现的计数排序算法示例
2017/11/29 Python
python中cPickle类使用方法详解
2018/08/27 Python
对python 生成拼接xml报文的示例详解
2018/12/28 Python
详解Python 字符串相似性的几种度量方法
2019/08/29 Python
JRE、JDK、JVM之间的关系怎样
2012/05/16 面试题
企业管理毕业生求职信范文
2014/03/07 职场文书
信息管理应届生求职信
2014/03/07 职场文书
公民代理授权委托书
2014/09/24 职场文书
云南省召开党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
2015年统战工作总结
2015/05/19 职场文书
毕业论文答辩开场白和答辩技巧
2015/05/27 职场文书
MySQL索引知识的一些小妙招总结
2021/05/10 MySQL