uniapp 多个video组件,如何实现每次只有一个视频在播放,其他的在暂停,写代码
时间: 2024-04-29 17:23:48 浏览: 312
可以通过以下步骤实现每次只有一个视频在播放,其他的在暂停:
1. 在每个video组件上添加一个id属性,用来标识不同的视频组件。例如:
```html
<video :src="video1" id="video1"></video>
<video :src="video2" id="video2"></video>
```
2. 在data中添加一个变量,用来保存当前正在播放的视频组件的id。初始值为null。
```js
data() {
return {
currentVideoId: null
}
}
```
3. 在每个video组件上绑定一个play事件和pause事件,用来更新currentVideoId的值。
```html
<video :src="video1" id="video1" @play="onPlay('video1')" @pause="onPause('video1')"></video>
<video :src="video2" id="video2" @play="onPlay('video2')" @pause="onPause('video2')"></video>
```
```js
methods: {
onPlay(videoId) {
if (this.currentVideoId && this.currentVideoId !== videoId) {
// 如果当前有正在播放的视频,并且不是当前触发的视频,则暂停当前视频
const currentVideo = uni.createVideoContext(this.currentVideoId)
currentVideo.pause()
}
this.currentVideoId = videoId
},
onPause(videoId) {
if (this.currentVideoId === videoId) {
// 如果暂停的视频是当前正在播放的视频,则清空currentVideoId
this.currentVideoId = null
}
}
}
```
4. 在mounted生命周期钩子中,获取所有video组件的id,并将其保存到一个数组中。
```js
mounted() {
this.videoIds = this.$el.querySelectorAll('video').map(v => v.id)
}
```
完整代码如下:
```html
<template>
<view>
<video :src="video1" id="video1" @play="onPlay('video1')" @pause="onPause('video1')"></video>
<video :src="video2" id="video2" @play="onPlay('video2')" @pause="onPause('video2')"></video>
</view>
</template>
<script>
export default {
data() {
return {
videoIds: [],
currentVideoId: null,
video1: 'http://example.com/video1.mp4',
video2: 'http://example.com/video2.mp4'
}
},
mounted() {
this.videoIds = this.$el.querySelectorAll('video').map(v => v.id)
},
methods: {
onPlay(videoId) {
if (this.currentVideoId && this.currentVideoId !== videoId) {
// 如果当前有正在播放的视频,并且不是当前触发的视频,则暂停当前视频
const currentVideo = uni.createVideoContext(this.currentVideoId)
currentVideo.pause()
}
this.currentVideoId = videoId
},
onPause(videoId) {
if (this.currentVideoId === videoId) {
// 如果暂停的视频是当前正在播放的视频,则清空currentVideoId
this.currentVideoId = null
}
}
}
}
</script>
```
阅读全文