zoukankan      html  css  js  c++  java
  • 在移动端语言react中使用video.js

    在video.js基础上封装了一个reactVideo弹窗组件

    效果图

      npm install video.js --save 首先npm 安装video.js
      1 //ReactVideo.tsx
      2 import React, { Component, Fragment } from 'react';
      3 import videojs from 'video.js';
      4 import videoX from '@/assets/images/videoX.png';
      5 import 'video.js/dist/video-js.min.css';
      6 import './ReactVideo.less';
      7 
      8 interface IProps {
      9   /**
     10    * 视频路径
     11    */
     12   videoPath?:string
     13   /**
     14    * 关闭视频
     15    */
     16   closeVideo?:()=>void
     17 }
     18 
     19 export default class ReactVideo extends React.Component<IProps> {
     20   myVideo:any;
     21 
     22   constructor(props) {
     23     super(props);
     24   }
     25 
     26   componentDidMount() {
     27     this.myVideo = videojs('myVideo', {
     28       controls: true,
     29       bigPlayButton: true,
     30       controlBar: {
     31         children: [
     32           { name: 'playToggle' },
     33           { name: 'currentTimeDisplay' }, // 当前已播放时间
     34           { name: 'progressControl' },
     35           { name: 'durationDisplay' }, // 总时间
     36           { // 倍数播放
     37             name: 'playbackRateMenuButton',
     38             playbackRates: [0.5, 1, 1.5, 2],
     39           },
     40           {
     41             name: 'volumePanel', // 音量控制
     42             inline: false, // 不使用水平方式
     43           },
     44           { name: 'FullscreenToggle' }, // 全屏
     45         ],
     46 
     47       },
     48     });
     49     this.myVideo.play();
     50   }
     51 
     52   closeVideoGialog=() => {
     53     const { closeVideo } = this.props;
     54     closeVideo();
     55   };
     56 
     57   componentWillUnmount() {
     58     this.myVideo.dispose();
     59   }
     60 
     61   render() {
     62     const { videoPath, closeVideo } = this.props;
     63     return (
     64       <>
     65         <div className="react-video-mask" onClick={this.closeVideoGialog} />
     66         <div className="react-video-box">
     67           <div className="close-icon" style={{ backgroundImage: `url(${videoX})` }} onClick={this.closeVideoGialog} />
     68           <video
     69             id="myVideo"
     70             className="video-js vjs-default-skin"
     71             controls
     72             preload="auto"
     73           >
     74             <source id="source" src={videoPath} type="video/mp4" />
     75           </video>
     76         </div>
     77       </>
     78     );
     79   }
     80 }
     81 下面是样式
     82 ///////ReactVideo.less
     83 .react-video-mask{
     84   position: fixed;
     85   left:0;
     86   top:0;
     87   right:0;
     88   bottom:0;
     89   100%;
     90   height:100vh;
     91   z-index:100;
     92   background:rgba(0,0,0,0.8);
     93 }
     94 .react-video-box{
     95   position: fixed;
     96   left:50%;
     97   top:30%;
     98   transform: translate(-50%,-50%);
     99   6.75rem;
    100   height:3.8rem;
    101   
    102   background: #2D3033;
    103   z-index:101;
    104   transition:0.3s all;
    105   #myVideo{
    106     6.75rem;
    107     height:3.8rem;
    108     .vjs-control-bar{
    109       line-height:72px;
    110       height:72px;
    111     }
    112     button{
    113       60px ;
    114     }
    115     .vjs-menu-button{
    116       60px;
    117     }
    118     .vjs-volume-panel{
    119       60px;
    120     }
    121     .vjs-button>.vjs-icon-placeholder:before{
    122       line-height: 2.2;
    123       font-size: 32px;
    124     }
    125     .vjs-play-progress:before{
    126       font-size: 20px;
    127       position: absolute;
    128       right: -0.5em;
    129       top: -0.34rem;
    130       z-index: 1;
    131     }
    132     .vjs-progress-holder{
    133       height: 0.06rem;
    134       line-height: 0.72rem;
    135     }
    136     .vjs-time-control{
    137       line-height:72px;
    138     }
    139     .vjs-playback-rate .vjs-playback-rate-value{
    140       line-height:72px;
    141       font-size: 26px;
    142     }
    143     .vjs-current-time, .vjs-no-flex .vjs-current-time,
    144     .vjs-duration, .vjs-no-flex .vjs-duration{
    145       display:block;
    146     }
    147   }
    148   
    149   .close-icon{
    150     0.6rem;
    151     height:0.6rem;
    152     position: absolute;
    153     top: 0px;
    154     right: 0px;
    155     z-index: 120;
    156     background-size:0.36rem 0.36rem;
    157     background-repeat: no-repeat;
    158     background-position: center ;
    159   }
    160 }

    以上是组件
    下面介绍下使用

    {
              (视频路径) && videoShow(控制弹窗的参数) && (
                <ReactVideo videoPath={视频路径} closeVideo={this.closeVideoHandler} />
              )
            }
    
    //弹窗关闭和开启这个就不写了,因为很基础,只需要控制videoShow显隐即可

    video.js配置参考文档

    https://www.cnblogs.com/Renyi-Fan/p/11626583.html#_label3

  • 相关阅读:
    python-scapy学习笔记-(1)
    python系统性能模块笔记
    Python爬虫总结
    pm2的的常用命令及用法
    Javascript的map与forEach的区别
    对MVVM思想的在认识
    RN的打包
    undefined与null的区别
    rem与em的区别
    JS的函数参数传递为值传递
  • 原文地址:https://www.cnblogs.com/zhihou/p/14247667.html
Copyright © 2011-2022 走看看