视频列表:点击某个视频进行播放,其余视频全部暂停(同时只播放一个视频)

31 篇文章 0 订阅
6 篇文章 0 订阅

需求

视频列表:点击某个视频进行播放,其余视频全部暂停(同时只播放一个视频

实现原理

  1. 在 video 标签添加 自定义属性 id (必须唯一)
  2. 给每个 video 标签 添加 play 视频播放事件
  3. 播放视频时,触发 play 事件,通过添加的自定义属性 id 判断,将 非当前播放视频都暂停

实现代码

<!-- 查看视频 -->
<template>
  <el-drawer
    title="查看视频"
    size="70%"
    :visible.sync="drawerVisible"
    destroy-on-close
    :before-close="handleClose"
  >
    <div class="list">
      <div v-for="item in videoList" :key="item.id">
        <!-- 【主要代码】添加自定义属性 id -->
        <video width="100%" controls="controls" :data-id="item.id">
          <source src="./video.mp4" type="video/mp4" />
        </video>
      </div>
    </div>
  </el-drawer>
</template>

<script>
export default {
  name: 'VideoListDrawer',

  data() {
    return {
      drawerVisible: false,

      drawerType: '',
      videoList: [...Array(20).keys()].map((item) => {
        return {
          id: item
        }
      }),
      currentVideo: ''
    }
  },

  methods: {
    open(type, rowData) {
      this.drawerType = type
      setTimeout(() => {
        this.getVideoDom()
      }, 500)
      this.drawerVisible = true
    },
	
	// 【主要代码】视频播放暂停处理函数
    getVideoDom() {
      const videoList = document.querySelectorAll('video')
      videoList.forEach((item) => {
        // 每个 video 添加 play 监听事件
        item.addEventListener('play', (e) => {
          // 获取当前播放视频的自定义属性 id 的值
          this.currentVideo = e.target.dataset.id
          // 遍历所有 video 标签,将非当前播放视频都暂停
          videoList.forEach((i) => {
            if (i.dataset.id !== this.currentVideo) {
              i.pause() // 暂停视频
            }
          })
        })
      })
    },

    handleClose() {
      this.drawerVisible = false
    }
  }
}
</script>

<style lang='scss' scoped>
::v-deep .el-drawer {
  .el-drawer__header {
    text-align: left;
  }
  .el-drawer__body {
    padding: 10px 20px;
    text-align: left;

    .btns {
      margin-bottom: 10px;
    }

    .list {
      display: flex;
      flex-wrap: wrap;
      > div {
        width: calc(50% - 10px);
        margin-right: 10px;
        margin-bottom: 10px;
      }
    }
  }
}
</style>

页面展示

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值