• 2022-11-10 工作记录--HTML-video视频播放


    HTML-video视频铺满播放

    一、实现效果 ⭐️

    1、未铺满播放 ❎

    请添加图片描述

    2、铺满播放 ✅

    请添加图片描述

    二、实现代码 ⭐️

    react为例

    1、未铺满播放 ❎

    homePage.jsx

    import React from 'react';
    
    import './homePage.less';
    
    class HomePage extends React.Component {
      constructor(props) {
        super(props);
    
        this.state = {
          showWidget: false, // 是否展示视频里的浏览器默认的控件
          isVideoPlay: false, // 是否播放视频
        }
      }
    
      // 播放视频
      playVideo = () => {
        this.setState({
          isVideoPlay: true,
          showWidget: true,
        });
        if (this.videoRef) {
          // 播放视频
          this.videoRef.play();
        }
      };
    
      render() {
        const { showWidget, isVideoPlay } = this.state;
    
        // 视频封面图(地址是我乱写的,根据自己需求来改)
        // eslint-disable-next-line
        const posterUrl = "https://yun.test.com.cn/poster.png";
        // 视频地址(地址是我乱写的,根据自己需求来改)
        // eslint-disable-next-line
        const videoUrl = "https://yun.test.com.cn/video.mp4";
    
        return (
          <div className="homePage">
            {/* 视频 */}
            <div className="videoItem">
              {/* video【注意:视频地址是通过接口获取时,一定不要忘记加 videoUrl &&。若忘记加了,视频就会加载不出来哦】*/}
              {
                videoUrl && (
                  <video
                    ref={el => (this.videoRef = el)}
                    className="videoContent"
                    // 浏览器默认的控件
                    controls={showWidget}
                    preload="auto"
                    webkit-playsinline="true"
                    playsInline={true}
                  >
                    {/* 视频地址 */}
                    <source src={videoUrl} type="video/mp4" />
                    您的浏览器不支持 video 标签。
                  </video>
                )
              }
              {/* 视频未播放时的展示内容 */}
              {!isVideoPlay &&
                <>
                  <img
                    className="videoPoster"
                    // 视频封面图
                    src={posterUrl}
                    onClick={this.playVideo}
                  />
                  <span className="tip">点击观看视频</span>
                </>
              }
            </div>
          </div >
        );
      }
    }
    
    export default HomePage;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77

    homePage.less

    .homePage {
      width: 100%;
      height: 100vh;
      margin: 0;
      padding: 0;
      background-color: #d8e9ef;
      padding-top: 549px;
      box-sizing: border-box;
      .videoItem {
        width: 696px;
        height: 370px;
        margin: auto;
        background-color: #fff;
        border-radius: 25px;
        position: relative;
        .videoContent,.videoPoster {
          width: 100%;
          height: 100%;
          border-radius: 25px;
          position: absolute;
          left: 50%;
          top: 50%;
          transform: translate(-50%,-50%);
        }
        .tip{
          width: 200px;
          height: 60px;
          position: absolute;
          left: 50%;
          top: 50%;
          transform: translate(-50%,-50%);
          background: rgba(0, 0, 0, 0.7);
          text-align: center;
          color: #ffffff;
          border-radius: 10px;
          line-height: 60px;
          /** 实现点击穿透 */
          pointer-events: none;
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    2、铺满播放 ✅

    video加上样式:object-fit: cover;,实现iosandroid都兼容。

    homePage.jsx

    import React from 'react';
    
    import './homePage.less';
    
    class HomePage extends React.Component {
      constructor(props) {
        super(props);
    
        this.state = {
          showWidget: false, // 是否展示视频里的浏览器默认的控件
          isVideoPlay: false, // 是否播放视频
        }
      }
    
      // 播放视频
      playVideo = () => {
        this.setState({
          isVideoPlay: true,
          showWidget: true,
        });
        if (this.videoRef) {
          // 播放视频
          this.videoRef.play();
        }
      };
    
      render() {
        const { showWidget, isVideoPlay } = this.state;
    
        // 视频封面图(地址是我乱写的,根据自己需求来改)
        // eslint-disable-next-line
        const posterUrl = "https://yun.test.com.cn/poster.png";
        // 视频地址(地址是我乱写的,根据自己需求来改)
        // eslint-disable-next-line
        const videoUrl = "https://yun.test.com.cn/video.mp4";
    
        return (
          <div className="homePage">
            {/* 视频 */}
            <div className="videoItem">
              {/* video【注意:视频地址是通过接口获取时,一定不要忘记加 videoUrl &&。若忘记加了,视频就会加载不出来哦】*/}
              {
                videoUrl && (
                  <video
                    ref={el => (this.videoRef = el)}
                    className="videoContent"
                    // 浏览器默认的控件
                    controls={showWidget}
                    preload="auto"
                    webkit-playsinline="true"
                    playsInline={true}
                    // 视频封面图
                    poster={posterUrl}
                    onClick={this.playVideo}
                  >
                    {/* 视频地址 */}
                    <source src={videoUrl} type="video/mp4" />
                    您的浏览器不支持 video 标签。
                  </video>
                )
              }
              {/* 视频未播放时的展示内容 */}
              {!isVideoPlay && <span className="tip">点击观看视频</span>}
            </div>
          </div >
        );
      }
    }
    
    export default HomePage;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70

    homePage.less

    .homePage {
      width: 100%;
      height: 100vh;
      margin: 0;
      padding: 0;
      background-color: #d8e9ef;
      padding-top: 549px;
      box-sizing: border-box;
      .videoItem {
        width: 696px;
        height: 370px;
        margin: auto;
        background-color: #fff;
        border-radius: 25px;
        position: relative;
        .videoContent {
          width: 100%;
          height: 100%;
          border-radius: 25px;
          position: absolute;
          left: 50%;
          top: 50%;
          transform: translate(-50%,-50%);
          /** 实现视频铺满 */
          object-fit: cover;
        }
        .tip{
          width: 200px;
          height: 60px;
          position: absolute;
          left: 50%;
          top: 50%;
          transform: translate(-50%,-50%);
          background: rgba(0, 0, 0, 0.7);
          text-align: center;
          color: #ffffff;
          border-radius: 10px;
          line-height: 60px;
          /** 实现点击穿透 */
          pointer-events: none;
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    哒哒哒哒~ biu biu biu~

    请添加图片描述

  • 相关阅读:
    PHP:错误
    Linux 文件操作(一) —— 遍历指定目录下的所有文件
    实验六 设计模式
    基于瞬时频率的语言信号清/浊音判决和高音检测(MATLAB R2021)
    C++11标准模板(STL)- 算法(std::nth_element)
    ssm校园网上订餐系统的设计与实现毕业设计-附源码211510
    学习pytorch12 神经网络-线性层
    Linux常用命令
    Python 爬虫实战之爬拼多多商品并做数据分析
    【ModelArts】【训练作业】请问ModealArts平台进行训练时是否自动采用混合精度
  • 原文地址:https://blog.csdn.net/weixin_48850734/article/details/127783266