赞
踩
借鉴了不少文章,照着来净报错,恼了自己给自己留一篇绝不报错的!
参考文章:https://www.jianshu.com/p/8b8023c7ed37
一、安装
$ npm install video.js
二、main.js全局引入
- // 引入video.js
-
- import Videojs from 'video.js'
-
- import 'video.js/dist/video-js.css'
-
- Vue.prototype.$video = Videojs
三、组件中的使用
结构部分:
- <template>
-
- <!-- 顶部banner图 -->
- <header>
- <!-- 如果有视频,不展示banner图,显示视频框 -->
- <img :src="aggregationData.BannerImage" v-show="isBanner" alt="">
- <div v-show="isVideo">
- <video
- id="myVideo"
- class="video-js vjs-big-play-centered vjs-fluid"
- controls
- preload="auto"
- width="100%"
- height="100%"
- :poster="aggregationData.BannerImage"
- >
- <source
- type="video/mp4"
- :src="aggregationData.BannerVideo"
- >
- </video>
- </div>
- </header>
-
- </template>
数据部分:
- <script>
- /* eslint-disable */
-
- export default {
-
- data() {
- return {
-
- isBanner:true,// 是否显示banner图
- isVideo:true,// 是否显示视频
-
- }
- },
-
- mounted() {
- this.getData()
-
- //console.log(this) //vue的原型链上有$video方法
- //console.log(this.$video)
-
- },
- methods: {
- initVideo() { //此处初始化的调用,我放在了获取数据之后的方法内,而不是放在钩子函数mounted
- //页面dom元素渲染完毕,执行回调里面的方法
- this.$nextTick(() => {
- let myPlayer = this.$video(document.getElementById('myVideo'), {
- //确定播放器是否具有用户可以与之交互的控件。没有控件,启动视频播放的唯一方法是使用autoplay属性或通过Player API。
- controls: true,
- //自动播放属性,muted:静音播放
- autoplay: false,
- //建议浏览器是否应在<video>加载元素后立即开始下载视频数据。
- preload: "auto",
- //设置视频播放器的显示宽度(以像素为单位)
- // width: "800px",
- //设置视频播放器的显示高度(以像素为单位)
- // height: "400px",
- controlBar:{
- playToggle:true
- }
- });
- })
-
- }
- }
注意事项:
1.videojs的初始化方法的调用,是在获取接口数据的方法内部,而非在mounted;
2.避免初始化不彻底,导致获取不到相对应的媒体资源;选择采用this.$nextTick()方法,利用其中的回调函数,使得DOM渲染刷新后再次获取video所需的相关数据,促使再次视图更新
3.this.$video和main.js中Vue.prototype.$video = Videojs 相呼应,不能写错哦!
四、默认样式的修改
参考文章:https://www.awaimai.com/2053.html
考虑到层级,在index.less中做修改,同时,采用了!important
- .video-js{
- width: 120%!important;
- height: 100%!important;
- }
- .video-js .vjs-big-play-button {
- font-size: 3em;
- line-height: 42px!important;
- height: 50px!important;
- width: 50px!important;
- display: block;
- position: absolute!important;
- left:50%!important;
- top:50%!important;
- margin-top:-25px!important;
- margin-left:-25px!important;
- padding: 0;
- cursor: pointer;
- opacity: 1;
- border: 0.06666em solid #fff;
- background-color: #2B333F;
- background-color: rgba(43, 51, 63, 0.7);
- border-radius: 50%!important;
- -webkit-transition: all 0.4s;
- transition: all 0.4s;
- }
- .vjs-paused .vjs-big-play-button,
- .vjs-paused.vjs-has-started .vjs-big-play-button {
- display: block!important;
- }
- .myVideo-dimensions {
- width: 100%!important;
- height: 100%!important;
- display: block!important;
- }
- .vjs-poster{
- background-size: 100% 100%!important;
- }
css部分可以按照自己的需要来改,我写的不够简约,应该有更巧妙的办法吧!希望你可以提出自己意见来!
五,最终呈现出的效果:
控件部分:参考文章:https://segmentfault.com/a/1190000018914486?utm_source=tag-newest
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。