Vue使用原生方式把视频当作背景

文章目录

  • [1. 首先我们先把布局写入:](#1. 首先我们先把布局写入:)

  • 2.接下来我们要根据屏幕对视频进行自适应处理

  • [3. 此时有人会想Vue是不需要操作Dom元素的,那原生怎么适配,那么就来一个原生写法](#3. 此时有人会想Vue是不需要操作Dom元素的,那原生怎么适配,那么就来一个原生写法)

  • 特别注意:由于视频不能写为背景,需用z-index来区分元素层级

1. 首先我们先把布局写入:

javascript 复制代码
<div class="video-container">
   <video :style="fixStyle" autoplay loop muted class="fillWidth" :canplay="canplay" >
     <source src="../assets/test.mp4" type="video/mp4" />
     <!-- 浏览器不支持 video 标签,建议升级浏览器。 -->
     <source src="../assets/test.mp4" type="video/webm"/>
     <!-- 浏览器不支持 video 标签,建议升级浏览器。 -->
    </video>
  </div>
</div>

<style scoped>
.homepage-hero-module,
.video-container {
  position: relative;
  height: 100vh;
  overflow: hidden;
}

.video-container {
  z-index: 0;
  position: absolute;
}

.fillWidth {
  width: 100%;
}
</style>

2.接下来我们要根据屏幕对视频进行自适应处理

javascript 复制代码
  mounted() {
    // 屏幕自适应
    // 获取屏幕宽高,根据不同屏幕调整视频的宽高自适应大小
    window.onresize = () => {
      const windowWidth = document.body.clientWidth
      const windowHeight = document.body.clientHeight
      const windowAspectRatio = windowHeight / windowWidth
      let videoWidth
      let videoHeight
      if (windowAspectRatio < 0.5625) {
        videoWidth = windowWidth
        videoHeight = videoWidth * 0.5625
        this.fixStyle = {
          height: windowWidth * 0.5625 + 'px',
          width: windowWidth + 'px',
          'margin-bottom': (windowHeight - videoHeight) / 2 + 'px',
          'margin-left': 'initial'
        }
      } else {
        videoHeight = windowHeight
        videoWidth = videoHeight / 0.5625
        this.fixStyle = {
          height: windowHeight + 'px',
          width: windowHeight / 0.5625 + 'px',
          'margin-left': (windowWidth - videoWidth) / 2 + 'px',
          'margin-bottom': 'initial'
        }
      }
    }
  }

3. 此时有人会想Vue是不需要操作Dom元素的,那原生怎么适配,那么就来一个原生写法

  • 书写基本样式,与Vue的基本一样,加入了object-fit: cover标签使音频自适应video宽高
javascript 复制代码
<style >
  *{
    margin: 0;
    padding: 0; 
    width: 100%;
    height: 100%;
    /* 清除浏览器边距用 */
  }
  .homepage-hero-module,
  .video-container {
    position: relative;
    heviight: 100vh;
    overflow: hidden;
  }
  
  .video-container {
    z-index: 0;
    position: absolute;
  }
  .fixStyle{
    object-fit: cover
  }
  .fillWidth {
    width: 100%;
  }
  </style>
  
<body>
  <div class="video-container">
    <video class="fixStyle" autoplay loop muted class="fillWidth" :canplay="canplay" >
      <source src="./test.mp4" type="video/mp4" />
      <!-- 浏览器不支持 video 标签,建议升级浏览器。 -->
      <source src="./test.mp4" type="video/webm"/>
      <!-- 浏览器不支持 video 标签,建议升级浏览器。 -->
    </video>
  </div>
</div>
</body>
  • 重点关注下逻辑,因为原生的需要操纵Dom元素
  • 只需使用 document.querySelector('')即可,注:class使用document.querySelector('.样式名') id使用document.querySelector('#id名')
  • 由于想进入界面就看到效果,可以用立即执行函数(function () {})());
javascript 复制代码
    // 屏幕自适应
    // 获取屏幕宽高,根据不同屏幕调整视频的宽高自适应大小
<script>
      (window.onresize = () => {
      const windowWidth = document.body.clientWidth
      const windowHeight = document.body.clientHeight

      const windowAspectRatio = windowHeight / windowWidth
      // 获取Dom节点
      const fixStyle = document.querySelector('.fixStyle')
      let videoWidth
      let videoHeight
      if (windowAspectRatio < 0.5625) {
        videoWidth = windowWidth
        videoHeight = videoWidth * 0.5625
        fixStyle.style.height = windowHeight + 'px',
        fixStyle.style.width =windowWidth + 'px',
        fixStyle.style.marginLeft = 'initial'
        fixStyle.style.marginBottom = (windowHeight - videoHeight) / 2 + 'px'
      } else {
        videoHeight = windowHeight
        videoWidth = videoHeight / 0.5625
        fixStyle.style.height = windowHeight + 'px',
        fixStyle.style.width = windowHeight / 0.5625 + 'px',
        fixStyle.style.left = (windowWidth - videoWidth) / 2 + 'px',
        fixStyle.style.bottom = 'initial'
      }
    })()
</script>
相关推荐
Csvn1 小时前
组合式 API(Composition API)
前端
火柴就是我2 小时前
Android 打包报错 25.0.3
android·前端
BD_Marathon2 小时前
消息对象中字段的说明
java·前端·python
八荒启·交互动画2 小时前
Web特效025—用 Canvas 2D 做Web特效的定义与边界:这支画笔能做到哪一步
前端·webgl·网页特效·八荒启-交互动画·八荒启
Ai-_Man3 小时前
您您这可以把Dola的多个会话比如说。左侧的多个会话一次性导出吗?不是单条会话里面的多次会对话。用AI导出鸭,答案是可以的
开发语言·前端·人工智能·小程序
excel3 小时前
Nuxt 中使用 useHead 优化 SEO 与 GEO
前端
IT_陈寒4 小时前
SpringBoot启动慢得像蜗牛?原来是这个配置在捣鬼
前端·人工智能·后端
计算机魔术师4 小时前
Muse Spark跑赢Gemini,但真正的底牌是这种设计
前端
雪芽蓝域zzs4 小时前
第4节:el-select 弹窗事件控制(打开 / 关闭、选中事件、弹窗滚动事件)
vue.js·elementui
PYB34 小时前
【Web·JS·基础】函数的使用和展运算符...objs
前端·javascript