1***@qq.com
1***@qq.com
  • 发布:2026-06-30 19:29
  • 更新:2026-06-30 20:03
  • 阅读:96

在做uview app时【报Bug】swiper嵌套swiper,内部的swiper滑动无效,而是外部的被滑动。

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: 11

HBuilderX类型: 正式

HBuilderX版本号: 5.07

手机系统: Android

手机系统版本号: Android 15

手机厂商: 小米

手机机型: 红米

页面类型: vue

vue版本: vue3

打包方式: 离线

项目创建方式: HBuilderX

操作步骤:

在做uview app时【报Bug】swiper嵌套swiper,内部的swiper滑动无效,而是外部的被滑动。

预期结果:

滑动内部的swiper就是内部的,不影响外部的

实际结果:

swiper嵌套swiper,内部的swiper滑动无效,而是外部的被滑动。

bug描述:

在做uview app时【报Bug】swiper嵌套swiper,内部的swiper滑动无效,而是外部的被滑动。

2026-06-30 19:29 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

好的,我是 DCloud 官方人员,现在对这个 bug 反馈进行评审。

评审意见如下:

1. 反馈内容完整性分析

这份反馈的质量还有很大的提升空间,目前来看关键信息缺失,很难直接定位和处理。

  • BUG 描述:过于简单,只是重复了标题。没有说明具体的使用场景,比如是用于实现类似抖音的上下滑动切换视频,还是用于 banner 轮播图内嵌一个横向的商品列表?不同的场景,解决方案和问题原因可能完全不同。
  • 代码示例严重缺失。这是最关键的问题。没有提供可复现的代码片段,我们无法直观地看到你的 swiper 嵌套结构、属性设置(如 vertical 方向、disable-touch 等)以及样式代码。这导致我们无法快速复现问题,排查效率会非常低。
  • 复现步骤:同样过于简单,基本等于没说。结合缺失的代码示例,我们无法根据现有描述成功复现问题。
  • 预期结果:描述是合理的,即“滑动内部 swiper 时,不影响外部 swiper”。
  • 实际结果:描述清晰,即“滑动内部 swiper 时,触发了外部 swiper 的滑动”。
  • 分类信息:提供了 HBuilderX 版本(5.07)、手机系统(Android 15)、Vue 版本(Vue3)等信息,这部分是完整的,值得肯定。

2. 问题是否成立分析

这个 bug 是可能成立的,但需要区分场景,并且很可能不是一个新问题。

  • 历史问题依据:在知识库中,我找到了一个与你描述高度相似的已修复问题。在 release-note-alpha 的更新日志中明确提到:“App-Android平台 修复 组件 swiper 相互嵌套时只能滚动外层 swiper 的Bug”。该问题有对应的 issue 记录,你可以查看详情:ISSUE 系统 #558
  • 版本判断:你反馈的 HBuilderX 版本是 5.07(正式版)。根据知识库,这个修复是在 4.06.2024032513 版本中引入的,而 5.07 版本远高于此版本,理论上该修复应该已经包含在内。因此,你遇到的问题可能不是同一个已修复的 bug,而是一个特定场景下的回归问题,或者是由其他原因触发的。
  • 可能的原因分析
    • 原生组件层级问题(App-vue):如果你在 App-vue 页面中使用 swiper,并且内部 swiper 嵌入了 videomap 等原生组件,滑动冲突是常见问题。原生组件层级最高,会优先响应触摸事件,导致 swiper 滑动失效。
    • nvue 页面:在 nvue 页面中,swiper 的滑动事件处理机制与 vue 页面不同,也可能存在类似冲突。
    • 特定属性设置disable-touch 属性的设置也可能影响嵌套的滑动行为。

3. 替代方案与建议

在等待官方修复或提供更详细代码示例前,你可以尝试以下方案:

  • 方案一(推荐):尝试使用 vertical 属性将内部或外部 swiper 设置为纵向滑动,明确区分滑动方向,这是解决手势冲突最直接有效的方法。例如,外部 swiper 横向滑动,内部 swiper 纵向滑动,手势就不会冲突。
  • 方案二:使用 disable-touch 属性配合自定义按钮来控制 swiper 的切换。比如,给内部 swiper 设置 disable-touch,然后通过点击按钮来切换其 current 属性。
  • 方案三:在插件市场搜索相关替代方案,例如 仿swiper,可以内置scroll-viewyy-swiper,滑动事件 等插件,它们可能通过自定义手势处理解决了此类冲突。
  • 方案四:如果你是在 App 端使用 plus 的 webview 做滑动切换,可以参考 plus.webview.WebviewObject.drag 的 API,通过关联窗口拖拽来实现滑动切换效果,这种方式能更精细地控制手势。

总结与后续操作

当前这个 bug 反馈是不合格的,无法直接进入处理流程。 请你补充一个最简可复现的代码示例(一个完整的 .vue 文件),并明确说明你的页面类型是 vue 还是 nvue,以及内部 swiper 里是否包含了 videowebview 等特殊组件。你可以通过 ask 社区 提交一个包含完整 demo 的新帖子,并关联这个 issue,这样能帮助我们更快地定位问题。

内容为 AI 生成,仅供参考
1***@qq.com

1***@qq.com (作者)



//首页  
<!-- 频道 swiper -->  
        <swiper v-if="tabs.length > 0" class="list-swiper" :current="swiperCurrent" @change="onSwiperChange">  
            <swiper-item v-for="(tab, idx) in tabs" :key="idx">  

            <list-view class="list-scroll" scroll-y="true" style="flex: 1;"  
                    :show-scrollbar="false"  
                    :refresher-enabled="true"  
                    :refresher-triggered="tabRefreshing[idx]"  
                    refresher-default-style="none"  
                    :refresher-threshold="100"  
                    refresher-max-drag-distance="200px"  
                    @refresherrefresh="onRefresh(idx)"  
                    @refresherpulling="onPulling(idx, $event)"  
                    @refresherrestore="onRestore(idx)"  
                    @refresherabort="onAbort(idx)"  
                    @scrolltolower="onLoadMore(idx)">  
                    <list-item slot="refresher" class="refresh-box" >  
                        <uni-refresh-box :pulling-distance="tabPullingDistance[idx]" :refreshing="tabRefreshing[idx]"></uni-refresh-box>  
                    </list-item>  
                    <list-item v-for="(group, gidx) in tabLists[idx]" :key="gidx">  

                        <cms-card :group="group" :channel-id="tabs[idx].cardgroups" @click="goDetail(group, $event)"></cms-card>  

                    </list-item>  
                    <list-item v-if="tabIsLoadingMore[idx]">  
                        <text class="status-tip">加载更多…</text>  
                    </list-item>  
                    <list-item v-if="!tabHasMore[idx] 

要回复问题请先登录注册