vue2,组件里有多个video, 但是我想同一时间只能有一个播放,怎么办

通过Vue的事件监听和组件间通信,可以在同一个Vue2应用中确保同一时间只播放一个<video>标签。通过在父组件中维护当前播放的视频引用,并在子组件的play事件中通知父组件,可以实现播放控制。当新的视频开始播放时,父组件会暂停当前播放的视频,从而达到单视频播放的效果。
摘要由CSDN通过智能技术生成

要实现在 Vue 2 中的组件里,同一时间只能播放一个 <video> 标签,你可以使用 Vue 的事件监听和组件之间的通信。以下是一个简单的示例:

  1. 在父组件中创建一个数据属性(如 currentPlayingVideo),用于存储当前播放的 <video> 组件的引用。
  2. 将父组件的数据属性传递给子组件(如 VideoPlayer)。
  3. 在子组件中,监听 <video> 标签的 play 事件,并使用一个自定义事件(如 video-play)向父组件发送当前播放的 <video> 组件的引用。
  4. 在父组件中,监听 video-play 自定义事件,并更新 currentPlayingVideo 数据属性。同时,暂停其他正在播放的 <video> 组件。

以下是一个简化的代码示例:

父组件:

<template>
  <div>
    <video-player
      v-for="(video, index) in videos"
      :key="index"
      :video="video"
      :current-playing-video="currentPlayingVideo"
      @video-play="onVideoPlay"
    ></video-player>
  </div>
</template>

<script>
import VideoPlayer from './VideoPlayer.vue';

export default {
  components: {
    VideoPlayer
  },
  data() {
    return {
      videos: [...], // 视频列表
      currentPlayingVideo: null // 当前播放的视频
    };
  },
  methods: {
    onVideoPlay(playingVideo) {
      if (this.currentPlayingVideo && this.currentPlayingVideo !== playingVideo) {
        this.currentPlayingVideo.pause();
      }
      this.currentPlayingVideo = playingVideo;
    }
  }
};
</script>

子组件(VideoPlayer.vue):

<template>
  <div>
    <video
      ref="videoRef"
      :src="video.src"
      @play="onPlay"
    ></video>
  </div>
</template>

<script>
export default {
  props: {
    video: Object,
    currentPlayingVideo: Object
  },
  methods: {
    onPlay() {
      this.$emit('video-play', this.$refs.videoRef);
    },
    pause() {
      this.$refs.videoRef.pause();
    }
  }
};
</script>

在这个示例中,当一个 <video> 组件开始播放时,它会暂停其他正在播放的 <video> 组件,确保同一时间只有一个 <video> 标签在播放。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qx09

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值