uniapp swiper内嵌video组件的坑

本文介绍了一个uniapp项目中遇到的视频组件在不同Tab间切换时出现的层级问题及解决方案。通过添加视频封面并在适当时候显示和隐藏视频,确保了视频组件能够正常工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

是使用uniapp写的项目,需求就是写一个tab切换,tab1里面是一段文本,tab2也是,tab3里面需要使用video组件插入一个视频,我是使用的scroll-view与swiper组件实现tab滑动切换页面(当时想的这有啥难,分分钟搞定的事情嘛不是,然而等我加上视频在手机运行的时候搞了大半天一直是有问题,唉,我还是太年轻🤕)。所以这次遇到的一个小坑,就在这里记录一下叭😜

问题的原因就是video标签的层级太高了,导致滑到视频页面再切换回前面tab的时候视频就会压到上面,不会正常隐藏了

具体bug样子看下面图片叭

在这里插入图片描述

你看,就是这样,太淘气了
我网上找了半天也没找到合适的解决方法,然后突然我就灵机一动,tab1和tab2的时候把它隐藏,tab3再把它显示出来,他就不会出现这样了

话不多说上代码:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
嗯~~,giao ,很简单嘛,应该不会出现上面那个情况了吧!

我又运行到手机上看的时候,满脑子🧠的草泥马跑过去了
害,啥也不说了继续看图吧

在这里插入图片描述
😒😒😒😒😒😒😒😒,什么鬼嘛,怎么只有一半的视频呀,呀~~,我多滑了几次,嘿~~,这咋还得看手速呢,手速快了就全展示了,手速慢了就是整个黑背景

一顿操作猛如虎,一看战绩0杠5🙃

最后还是想到了一个解决办法,可能比较笨,但是我暂时也只到这了,剩下的智商还在努力开发中哈哈哈哈~

解决办法:给视频加上一个封面,(意思就是滑到视频页的时候封面展示出来,视频还是先隐藏着,点击封面上的开始按钮,视频展示出来,封面隐藏,就可以完美的展示并播放视频了,妈妈再也不用担心视频有问题了嘿嘿!!)


来吧,展示!!!

 

这样就好了,感谢观看,本人菜鸟一枚,可能这是一个比较低级的问题了,但是还是想在这里记录一下以防以后遇到类似
如果你们也遇到这样的问题希望可以对你们有所帮助,有错误或者更好的建议的话也请各位大神多多指教

😊😊😊😊😊😊😊😊😊

### 实现轮播图组件播放视频 在 UniApp 中,`swiper` 组件可以用来创建滑块视图容器,而 `video` 组件则用于处理多媒体文件的展示。为了实现在轮播图中集成和控制视频播放的功能,可以通过以下方式来设置: #### 创建 SwiperVideo 结合结构 定义一个包含多个子项的 `swiper` 容器,在每个子项内放置一个 `video` 元素作为其内容的一部分。 ```html <template> <view class="container"> <!-- 轮播图 --> <swiper :indicator-dots="true" @change="handleSwiperChange"> <swiper-item v-for="(item, index) in videoList" :key="index"> <video id="myVideo" :src="item.src" controls></video> </swiper-item> </swiper> </view> </template> <script> export default { data() { return { videoList: [ { src: 'path_to_video_1.mp4' }, { src: 'path_to_video_2.mp4' } ] }; }, methods: { handleSwiperChange(e) { const currentIndex = e.detail.current; this.pauseOtherVideos(currentIndex); }, pauseOtherVideos(activeIndex) { let videos = document.querySelectorAll('#myVideo'); Array.from(videos).forEach((video, idx) => { if (idx !== activeIndex) { video.pause(); } else { video.play().catch(error => console.log('Play failed:', error)); } }); } } }; </script> ``` 这段代码展示了如何利用 Vue.js 数据绑定特性以及事件监听机制去管理多个视频实例之间的交互行为[^1]。 当用户切换到新的幻灯片时触发 `@change` 事件处理器 (`handleSwiperChange`) 并暂停其他不在当前索引位置上的所有视频;对于处于活动状态下的那个视频,则尝试自动播放它。注意这里使用了原生 DOM API 来操作 HTMLMediaElement 对象的方法如 `.pause()` 和 `.play()` ,这是因为目前版本的 uni-app 尚未完全支持通过 props 或者 ref 方式直接访问底层 media element 的属性或方法[^2]。 此外,还可以考虑给每个 `video` 设置唯一的 ID 属性以便更精确地定位特定元素,或者采用更加复杂的逻辑来自定义播放控制器样式等功能扩展[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

地表最强菜鸡

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

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

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

打赏作者

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

抵扣说明:

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

余额充值