背景:根据用户的信息来显示不同的视频源

<template>
    <div class="video-box-wrap" v-show="video.show">
        <div class="video-box">
            <em class="video-close"  @click="showVideo(false)"></em>
            <video-player  class="video-player vjs-custom-skin"
                        ref="videoPlayer"
                        :options="playerOptions"
                        :playsinline="true"
                        customEventName="customstatechangedeventname"
                        @play="onPlayerPlay($event)"
                        @pause="onPlayerPause($event)"
                        @ready="playerReadied">
            </video-player>
        </div>
    </div>
</template>
export default {
    data () {
        return {
            playerOptions: {
                    // videojs options
                    muted: true,
                    language: 'en',
                    playbackRates: [0.7, 1.0, 1.5, 2.0],
                    sources: [{
                        type: "video/mp4",
                        src: "https://cdn.theguardian.tv/webM/2015/07/20/150716YesMen_synd_768k_vp8.webm"
                        // src: "http://www.17sucai.com/preview/501914/2017-08-04/%E9%A1%B5%E9%9D%A2/media/mov_bbb.mp4"
                    }],
                    muted: false, // 默认情况下将会消除任何音频。
                    loop: false,
                    language: 'zh-CN',
                    fluid: true, // 当true时,Video.js player将拥有流体大小。换句话说,它将按比例缩放以适应其容器。
                    poster: "/static/images/author.jpg",
                    width: 700,
                    notSupportedMessage: '此视频暂无法播放,请稍后再试', //允许覆盖Video.js无法播放媒体源时显示的默认信息。
                },
        }
    },
    methods: {
        showVideo (bol) {
            let myPlayer = this.$refs.videoPlayer.player;
            if( bol ) {
                myPlayer.src(this.getUserType); //根据userType的不同展示不同的视频地址
              return false
            };
        }
    },
    computed: {
        getUserType () {
            let userType = parseInt(this.userInfo.userType);
            let videoSrc = ""
            if(userType === 1){
                videoSrc = "https://cdn.theguardian.tv/webM/2015/07/20/150716YesMen_synd_768k_vp8.webm"
            }else if (userType === 2){
                videoSrc = "http://www.17sucai.com/preview/501914/2017-08-04/%E9%A1%B5%E9%9D%A2/media/mov_bbb.mp4"
            }
            return videoSrc;
        }
    }
}

初始 playerOptions.sources.src必须有值,否则后续视频的进度条会有问题
//感觉我使用的是最笨的方法,如果有更好的方法,望留言指教>_<

又一次用到了vue-video-player

需要更改播放按钮,默认的是有一个比较丑的播放按钮,但是设计人员给出的播放按钮比较漂亮,一开始的思路是怎么把控制播放的事件绑定到自己写的按钮上面,最终没有实现= =。。。

然后开始想改变样式来控制,直接暴力修改它原本的样式,并通过比较播放暂停播放状态容器上类名的不同来显示隐藏“漂亮”的播放按钮

播放时和暂停时容器的类名差别是有没有  “vjs-paused”

最终的解决方法:
        .video-js{
            .fs(24);// 样式文件里元素的单位是em,因为控制条太小了,默认的font-size是10px,所以这里做了更改。 fs(24)最终通过less的处理会转换为rem单位
        }
        .video-js .vjs-big-play-button{
            position: absolute;
            display: block;
            left: 0px;
            top: 0px;
            width: 100%;
            height: 100%;
            background: rgba(0, 0, 0, .7);
            border: none;
        }
        .video-js .vjs-big-play-button .vjs-icon-placeholder:before{
            position: absolute;
            content: "";
            .w(120);
            .h(120);
            left: 50%;
            top: 50%;
            .ml(-60);
            .mt(-60);
            background: url("../../assets/images/icon_play@2x.png") center center no-repeat;
            background-size: 100% 100%;
            border: none;
        }
       //下面代码控制播放按钮是否显示
        .vjs-controls-disabled .vjs-big-play-button, .vjs-has-started .vjs-big-play-button, .vjs-using-native-controls .vjs-big-play-button, .vjs-error .vjs-big-play-button {
            display: none;
        }
        .vjs-paused .vjs-big-play-button {
            display: block;
        }

今天脑袋突然开窍,发现一个不用更改原先的css就可以实现控制播放的方法,其实这样子用就可以,?
this.$refs.videoPlayer.player.play();
this.$refs.videoPlayer.player.pause();
Logo

前往低代码交流专区

更多推荐