为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Vue.js/Nuxt.js 中播放单个视频时暂停所有其他视频?

如何在 Vue.js/Nuxt.js 中播放单个视频时暂停所有其他视频?

至尊宝的传说 2023-08-18 17:02:08
我有一个在 nuxt.js 应用程序上开发的提要组件,其中将显示多个用户的活动(发布视频、点赞、评论)。我们可以假设像 Facebook 的新闻源一样,我们有一系列视频。用户可以单击并播放其中任何一个。feed.vue<div v-for="(item, vidIndex) in videos":key="vidIndex">    <div>        <video :src="item.url" type="video/mp4"></video>    </div></div>问题是,用户可以单击多个视频来播放,并且所有视频都在播放并造成混乱。现在我想要的是,如果任何用户单击要播放的视频,则之前播放过的所有其他视频都应该暂停。有什么想法我该怎么做吗?
查看完整描述

1 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

这是一个可行的解决方案(更新视频 URL 后):


<template>

  <div>

    <div v-for="video in videos" :key="video.ref">

      <video :ref="video.ref" :src="video.url" type="video/mp4" @click="onClick(video)"></video>

    </div>

  </div>

</template>


<script>

export default {

  computed: {

    videos() {

      return [

        { url: 'https://path/to/your/video.mp4', ref: 'video0' },

        { url: 'https://path/to/your/video.mp4', ref: 'video1' },

        { url: 'https://path/to/your/video.mp4', ref: 'video2' },

      ];

    },

  },

  methods: {

    onClick({ ref }) {

      // Loop over all videos

      this.videos.forEach((video) => {

        // Get the DOM element for this video

        const $video = this.$refs[video.ref][0];

        // Play the video that the user clicked

        if (video.ref === ref) $video.play();

        // Pause all other videos

        else $video.pause();

      });

    },

  },

};

</script>

请注意,这里我将其定义videos为计算属性。它可能是你的情况的一个支柱。此示例为每个视频分配一个ref字符串,以便稍后可以在处理程序中直接操作该视频onClick。


查看完整回答
反对 回复 2023-08-18
  • 1 回答
  • 0 关注
  • 164 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信