uni-app swiper sticky list 在里面的list激活状态时,swiper 无法左右滚动
uni-app swiper sticky list 在里面的list激活状态时,swiper 无法左右滚动
操作步骤:
滚动list,激活内层list滚动 swiper无法左右滚动,滚上去,激活外层list滚动,swiper可以左右滚动
预期结果:
滚动list,激活内层list滚动 swiper可以左右滚动
实际结果:
滚动list,激活内层list滚动 swiper无法左右滚动
bug描述:
swiper sticky list 在里面的list激活状态时,swiper 无法左右滚动,只有滚动到上面,激活外层list的时候,swiper才能左右滚动, 使用的是官方提供的 多页签滑动吸顶效果demo
| 项目信息 | 值 | 
|---|---|
| 产品分类 | uniapp/App | 
| PC开发环境 | Windows | 
| PC开发环境版本号 | windows 10 | 
| HBuilderX类型 | 正式 | 
| HBuilderX版本号 | 3.4.6 | 
| 手机系统 | iOS | 
| 手机系统版本号 | iOS 15 | 
| 手机厂商 | 苹果 | 
| 手机机型 | iphone 13 | 
| 页面类型 | nvue | 
| vue版本 | vue2 | 
| 打包方式 | 云端 | 
| 项目创建方式 | HBuilderX | 
更多关于uni-app swiper sticky list 在里面的list激活状态时,swiper 无法左右滚动的实战教程也可以访问 https://www.itying.com/category-93-b0.html
还有个问题 之前改好了的swiper list  现在用最新版hbuilderx 又出问题了,里面list没法滚,现在又在照着官方demo改,也看不出来哪里出了问题,心累啊
更多关于uni-app swiper sticky list 在里面的list激活状态时,swiper 无法左右滚动的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这个不是bug吗,是新版本故意设置成这样的嘛,咋没人理我。。。
你好,没太理解是什么问题,测试了 多页签滑动吸顶效果demo 没发现有问题
回复 d***@whaiw.com: 现在正式版已经是3.4.7了,升级一下使用内置基座在测试一下看看,如果还有问题请录个屏看一下是怎么操作的
回复 DCloud_iOS_XHY: 升级到3.4.7就好了,谢谢
回复 DCloud_iOS_XHY: 如果需要的话 我可以用3.4.6复现出来
在 uni-app 中,如果你在 swiper 组件中使用了 sticky 布局,并且在 swiper 内部的 list 组件中激活了某些状态(例如滚动、点击等),可能会导致 swiper 无法左右滚动。这是因为 sticky 布局和 swiper 的滚动事件可能会产生冲突。
解决方案
- 
禁用
sticky布局的滚动事件: 如果你在sticky布局中使用了scroll-view或其他可滚动的组件,可以尝试禁用这些组件的滚动事件,或者通过条件判断来控制滚动行为。<scroll-view :scroll-y="!isSwiperActive"> <!-- 你的内容 --> </scroll-view>在
data中定义isSwiperActive,并在swiper的change事件中更新它:data() { return { isSwiperActive: false }; }, methods: { onSwiperChange(e) { this.isSwiperActive = e.detail.current !== 0; // 假设第一个页面不需要禁用滚动 } } - 
使用
touch事件手动控制swiper滚动: 你可以通过监听touch事件来手动控制swiper的滚动行为。例如,在list组件中监听touchstart和touchend事件,并在适当的时候阻止事件冒泡。<view [@touchstart](/user/touchstart)="onTouchStart" [@touchend](/user/touchend)="onTouchEnd"> <!-- 你的列表内容 --> </view>methods: { onTouchStart(e) { // 记录触摸开始的位置 this.startX = e.touches[0].clientX; }, onTouchEnd(e) { // 计算滑动距离 const endX = e.changedTouches[0].clientX; const deltaX = endX - this.startX; // 如果滑动距离大于某个阈值,则触发 swiper 滚动 if (Math.abs(deltaX) > 50) { this.$refs.swiper.next(); // 或者 this.$refs.swiper.prev(); } } } - 
调整
sticky布局的层级: 有时候sticky布局的层级可能会影响swiper的滚动。你可以尝试调整sticky布局的z-index,确保它不会覆盖swiper的滚动区域。.sticky-container { position: sticky; top: 0; z-index: 1; /* 调整 z-index */ } - 
使用
swiper的touch事件: 你可以通过监听swiper的touch事件来控制swiper的滚动行为。例如,在swiper的touchstart事件中禁用list的滚动,在touchend事件中恢复。<swiper [@touchstart](/user/touchstart)="onSwiperTouchStart" [@touchend](/user/touchend)="onSwiperTouchEnd"> <!-- 你的 swiper 内容 --> </swiper>methods: { onSwiperTouchStart() { this.isSwiperActive = true; }, onSwiperTouchEnd() { this.isSwiperActive = false; } } 
        
      
                    
                  
                    

