uniapp,scroll-view组件中,for循环video组件,如何保证只有一个视频在当前播放,滑动时,写代码
时间: 2024-05-06 20:22:05 浏览: 97
页面滚动时只有一次动画插件
可以通过监听scroll-view的scroll事件,在滑动时暂停当前正在播放的视频,同时记录当前正在播放的视频的索引,再在scroll结束后重新播放该视频。
具体代码如下:
```
<template>
<scroll-view scroll-y @scroll="onScroll">
<view v-for="(item, index) in videoList" :key="index">
<video :src="item.src" @play="onPlay(index)" @pause="onPause(index)"></video>
</view>
</scroll-view>
</template>
<script>
export default {
data() {
return {
videoList: [
{ src: 'http://example.com/video1.mp4' },
{ src: 'http://example.com/video2.mp4' },
{ src: 'http://example.com/video3.mp4' }
],
playingIndex: -1
}
},
methods: {
onScroll() {
if (this.playingIndex !== -1) {
// 暂停当前正在播放的视频
const video = this.$refs[`video${this.playingIndex}`][0]
video.pause()
}
},
onPlay(index) {
if (this.playingIndex !== -1 && this.playingIndex !== index) {
// 暂停当前正在播放的视频
const video = this.$refs[`video${this.playingIndex}`][0]
video.pause()
}
// 记录当前正在播放的视频的索引
this.playingIndex = index
},
onPause(index) {
if (this.playingIndex === index) {
// 当前正在播放的视频暂停时,重置playingIndex
this.playingIndex = -1
}
}
}
}
</script>
```
上面的代码中,我们通过给video组件添加ref属性来获取对应的video元素,然后在onPlay和onPause方法中记录和重置playingIndex,最后在onScroll方法中暂停当前正在播放的视频。这样就可以保证只有一个视频在当前播放了。
阅读全文