开整

  • 安装依赖
npm install vue-video-player --save
  • 1
  • 引入样式
// 第一个是videoJs的样式,后一个是vue-video-player的样式,因为考虑到我其他业务组件可能也会用到视频播放,所以就放在了main.js内
require('video.js/dist/video-js.css')
require('vue-video-player/src/custom-theme.css')
  • 把VueVideoPlayer导入并挂在到vue上
//在main.js内
import VideoPlayer from 'vue-video-player'
Vue.use(VideoPlayer);
  • 编写业务组件 myPlayer.vue
<template><div class="container"><div class="player"><video-player  class="video-player vjs-custom-skin"ref="videoPlayer":playsinline="true":options="playerOptions"@play="onPlayerPlay($event)"@pause="onPlayerPause($event)"></video-player></div></div>
</template><script>
import { videoPlayer } from 'vue-video-player';
export default {data () {return {playerOptions: {
//        playbackRates: [0.7, 1.0, 1.5, 2.0], //播放速度autoplay: false, //如果true,浏览器准备好时开始回放。muted: false, // 默认情况下将会消除任何音频。loop: false, // 导致视频一结束就重新开始。preload: 'auto', // 建议浏览器在<video>加载元素后是否应该开始下载视频数据。auto浏览器选择最佳行为,立即开始加载视频(如果浏览器支持)language: 'zh-CN',aspectRatio: '16:9', // 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字(例如"16:9"或"4:3")fluid: true, // 当true时,Video.js player将拥有流体大小。换句话说,它将按比例缩放以适应其容器。sources: [{type: "video/mp4",src: "http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4" //你的视频地址(必填)}],poster: "poster.jpg", //你的封面地址width: document.documentElement.clientWidth,notSupportedMessage: '此视频暂无法播放,请稍后再试', //允许覆盖Video.js无法播放媒体源时显示的默认信息。
//        controlBar: {
//          timeDivider: true,
//          durationDisplay: true,
//          remainingTimeDisplay: false,
//          fullscreenToggle: true  //全屏按钮
//        }}}},components: {videoPlayer},methods: {onPlayerPlay(player) {alert("play");},onPlayerPause(player){alert("pause");},},computed: {player() {return this.$refs.videoPlayer.player}}
}
</script><!-- Add "scoped" attribute to limit CSS to this component only -->
<style type="text/css" scoped>.container {background-color: #efefef;min-height: 100%;}
</style>

注意: 
1. video-player标签的class必须设置成“video-player vjs-custom-skin”,你引入的样式才能起作用。我刚开始做时,直接拷贝的github页的代码,那个代码的class是video-player-box。 
2. 根据videoJS Api修改属性。我这里加了一些注释,可以参考。 
3. 修改src、poster属性为你的服务器资源地址。

  • 增加hls支持
//安装依赖
npm install --save videojs-contrib-hls//在main.js内引入
require('videojs-contrib-hls/dist/videojs-contrib-hls');
  • 启动服务,查看效果
npm run dev
  • 1

  • videoJs的播放按钮默认为椭圆形,我个人有点不习惯,所以修改成了圆形。

    1. 增加css样式
.video-js .vjs-big-play-button{/*播放按钮换成圆形*/height: 2em;width: 2em;line-height: 2em;border-radius: 1em;}

注意: 
直接在 myPlayer.vue组件内增加样式会被覆盖,不论你有没有增加scoped属性,这取决于vue加载样式的顺序,之前查资料看了一个帖子,讲的很好,可惜找不着了。 
我最终的解决方案是:自定义了一个css文件,使用require引入到了main.js内,放在上述样式引入之后。

require('video.js/dist/video-js.css');
require('vue-video-player/src/custom-theme.css');
require('@/../static/css/myVideoCss.css');

大bug: 播放按钮与fastclick冲突

冲突是这样的:播放器在手机浏览器或者chrome开发者工具(手机尺寸)内,点击播放按钮,播放与暂停事件会被触发多次。

刚开始不知道什么原因,在github上提了个issure,刚提完就发现上一个关闭的issure解决的就是这个问题,这里得向作者道个歉,给您添堵了。哈哈。于是我看了另外一个人给的答案:与fastclick插件冲突……,但是….. 没有解决方案。然后我尝试注释掉了fastclick,果然是它影响的。

然后我去fastclick github 地址看了看 ,页面说的很清楚,只要在触发的元素上增加一个needsclick的class就可以了。

但是我试了好久都没有成功。这时候看到了神贴,大体浏览了一下fastclick的源码过程,并且作者提到“Fastclick 把 this.needsClick 放到了 ontouchEnd 末尾去执行,才导致前面说的加上了“needsclick”类名也无效的问题。”所以我想尝试修改fastclick的源码,并且验证一下。

  • 我把整个faseclick.js拷贝了出来,并采用require的方式引用。
const FastClick = require('@/../static/js/fastclick.js');
FastClick.attach(document.body);
  • 打开代码,猜想为什么needsclick没有起到作用,所以就直接检索了一下这个单词,在 FastClick.prototype.needsClick方法的最后,有一个验证:
return (/\bneedsclick\b/).test(target.className);
  • 首先FastClick.prototype.needsClick方法是判断元素是否要保留穿透功能,而最后一行肯定是验证触发的元素的class是不是含有needsclick。所以我先猜测是不是我触发的元素没有加上class,所以console了target.className: 

  • 果然没有,并且发现一个规律,我需要控制的按钮都是以vjs开头的,所以,在验证上再增加一个验证。

return ((/\bneedsclick\b/).test(target.className) || (/\bvjs/).test(target.className));
  • 问题解决,当然解决问题的方式暴力了一些,所以这里我希望看到并觉得此帖有帮助的同学能够在此基础上继续补充完善。我就先趟到这。

最后

  • 贴个版本
    "fastclick": "^1.0.6","videojs-contrib-hls": "^5.12.2","vue": "^2.2.2","vue-router": "^2.2.0","vue-video-player": "^4.0.6",

vue2.0+vue-video-player相关推荐

  1. Vue2.0 Vue组件 单文件组件

    聊到单文件就要写道xxx.vue,但是.vue文件浏览器是不认识的得处理和加工成.js怎么处理和加工 渠道一: webpack 渠道二: 借助Vue官方提供的脚手架(官方给你搭建的整个webpack编 ...

  2. Vue2.0 Vue脚手架 scopde样式

    学习scoped样式 问题 School.vue <template><div class="demo"> <h2>学校名称:{{name}}& ...

  3. Vue2.0 Vue路由_路由的几个注意点

    1.一般组件和路由组件 一般用import引入组件.components注册组件.<组件名 />或<组件名></组件名>这样的写法被我们称为一般组件 而我们没像上面 ...

  4. 【Vue】双向数据绑定原理 vue2.0 与 vue3.0

    目录 一.什么是双向数据绑定? 二.双向数据绑定原理 vue2.0 三.Vue 3.0使用ES6的新特性porxy 四.思考 一.什么是双向数据绑定? vue是一个mvvm框架,即数据双向绑定,即当数 ...

  5. b站黑马的Vue快速入门案例代码——【axios+Vue2】悦听player(音乐播放器)

    目录 本文中修改的原代码中的BUG: 修改方法: 本文案例代码仍有的BUG:(欢迎大家献计献策) 目标效果: 悦音player案例--效果展示视频: 更换的新接口/参数: 1.歌曲搜索接口:https ...

  6. vue2.0聊天室vue-chatRoom|仿微信界面vue+vuex+vueRouter

    Vue2.0+Vuex+VueRouter仿微信界面聊天室|仿微信聊天窗口|仿微信群聊 基于vue2.0+vuex+webpack2.0+es6+wcPop等技术开发的仿微信聊天室vue-weChat ...

  7. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十三║Vue实战:Vuex 其实很简单

    前言 哈喽大家周五好,马上又是一个周末了,下周就是中秋了,下下周就是国庆啦,这里先祝福大家一个比一个假日嗨皮啦~~转眼我们的专题已经写了第 23 篇了,好几次都坚持不下去想要中断,不过每当看到群里的交 ...

  8. [vue] 怎么配置使vue2.0+支持TypeScript写法?

    [vue] 怎么配置使vue2.0+支持TypeScript写法? 配置ts-loader,tsconfig增加类型扩展,让ts识别vue文件vue文件中script里面换成ts写法, 需要增加几个t ...

  9. [vue] 你知道vue2.0兼容IE哪个版本以上吗?

    [vue] 你知道vue2.0兼容IE哪个版本以上吗? 双向绑定的原理是基于Object,defineProperty的,ie8及以下不兼容这个api.另外还有一些特性至少在ie10才能用,我们已经弃 ...

  10. [vue] vue2.0不再支持v-html中使用过滤器了怎么办?

    [vue] vue2.0不再支持v-html中使用过滤器了怎么办? 在method中定义方法 htmlFilter(htmlString){ return htmlString.replace(/+s ...

最新文章

  1. java stop graceful
  2. (四)Struts2 架构
  3. 8 计算机组成原理第五章 中央处理器 控制器 硬布线控制器 微程序控制器
  4. Java编程学习中必须掌握的13个核心技术
  5. api idea 开发rest_部分介绍使用IDEA的rest client
  6. 信息学奥赛一本通 1188:菲波那契数列(2) | OpenJudge NOI 2.3 1760:菲波那契数列(2)
  7. 装饰者模式(Decorator)
  8. ubuntu14.04+ROS indigo+kinectV1 骨骼点检测
  9. react的事件机制
  10. 【SpringMVC】@Controller 和 @RestController 区别
  11. JavaScript如何进行文件上传
  12. Html表格代码实现打印
  13. Oracle导出部分表 par,Oracle使用par文件进行全库导入导出
  14. RIGOL DS70000系列示波器在USB2.0一致性分析测试方案
  15. 大学计算机知识点cad,大学cad考试试题「附答案」
  16. python搬家具_Python语言之学会Python之后!亲朋好友都夸我厉害!用Python买到最优惠的家具...
  17. 化工机械基础期末复习题及答案
  18. unshift() :将一个或多个元素添加到数组的开头
  19. Fabric ca学习笔记
  20. html 多个插件,webpack中html-webpack-plugin插件的使用(生成多个html页面,引入不同的js文件)...

热门文章

  1. airbnb代码的格式化 vuex也可配置
  2. python shutil_Python之shutil模块的使用
  3. 伸缩式网线如何缩回去
  4. 基于C++实现的进程调度算法
  5. 绝版!247个Python经典有趣实例,代码齐全可复制,PDF版拿走即用!
  6. 读<<清单革命>>笔记
  7. 两款C++静态检查工具
  8. MySQL如何创建用户
  9. 【python】pyautogui键盘鼠标的自动操作
  10. 《念奴娇·赤壁怀古》苏轼