uni-app scroll-view 下拉刷新存在BUG
uni-app scroll-view 下拉刷新存在BUG
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | win10 | HBuilderX |
示例代码:
<scroll-view scroll-y refresher-enabled [@refresherrefresh](/user/refresherrefresh)="refresh" style="width: 100%; height: 500px;">
<view style="height:3000px"></view>
</scroll-view>
refresh: function(){
console.log('下拉刷新');
}
操作步骤:
<scroll-view scroll-y refresher-enabled [@refresherrefresh](/user/refresherrefresh)="refresh" style="width: 100%; height: 500px;">
<view style="height:3000px"></view>
</scroll-view>
refresh: function(){
console.log('下拉刷新');
}
预期结果:
<scroll-view scroll-y refresher-enabled [@refresherrefresh](/user/refresherrefresh)="refresh" style="width: 100%; height: 500px;">
<view style="height:3000px"></view>
</scroll-view>
refresh: function(){
console.log('下拉刷新');
}
实际结果:
<scroll-view scroll-y refresher-enabled [@refresherrefresh](/user/refresherrefresh)="refresh" style="width: 100%; height: 500px;">
<view style="height:3000px"></view>
</scroll-view>
refresh: function(){
console.log('下拉刷新');
}
bug描述:
用scroll-view做滚动区域,添加下拉刷新@refresherrefresh事件,scroll-view里面的滚动还没到顶的时候@refresherrefresh事件就执行了。app 和 h5存在这个情况,小程序没有。
更多关于uni-app scroll-view 下拉刷新存在BUG的实战教程也可以访问 https://www.itying.com/category-93-b0.html
修复啥了,结果修复出另外问题了,滚动出现穿透了
更多关于uni-app scroll-view 下拉刷新存在BUG的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更新开发工具后 [Intervention] Ignored attempt to cancel a touchmove event with cancelable=false, for example because scrolling is in progress and cannot be interrupted.这个 出现了
现在 修复的不能穿透操作了。唉。
未复现您的问题。产品不会有明显的bug,所以你遇到的问题大都是在特定环境下才能重现的问题,请提供可稳定复现直接运行的完整示例(上传附件),方便我们快速排查问题哦。
【正确报bug的姿势】https://ask.dcloud.net.cn/article/38139
已上传附件,运行到h5或者app之后页面上一个滚动区域,先滚到最底部,然后往上滚还没到最上面就会触发@refresherrefresh事件
回复 Jiang731619: H5不支持,app-vue问题复现,后续优化,已加分,感谢您的反馈!
回复 DCloud_UNI_Anne: 现在好了,下拉刷新的只能触发一次啦
试试 HBuilderX alpha 3.1.22
越修复越乱,
回复 刘超群: 已看到你发的帖子,将会有人跟进
查了一下源码,7月5日提交的,有严重bug。beforeRefreshing在用户对refresherTriggered置为false的时候,不会发生变化,导致永远无法进行下一次刷新。多下拉几次,后面的操作都无法刷新了。
而且这次修复解决的问题,其实只需要原来的代码在每次处罚刷新之前,检测一下当前高度,满足条件,才进行refresh操作,完全没必要做这么大的改动,改完了之后又明显的没有做测试,害我们程序出问题。
而且原有bug可以通过外部代码解决,现在的这个代码,改外部代码完全没有作用。从普通bug变成高级bug。
3.2.0 alpha 已修复
回复 DCloud_UNI_LXH: 下载了最新的版本,已确认修复,话说你是功能代码作者本人吧。。。小伙要加油啊
回复 z***@163.com: 代码是之前的,在基础上做的修改
回复 DCloud_UNI_LXH: 兄弟,能不能加个微信?或者你找人帮我看看这个bug,有点急:https://ask.dcloud.net.cn/question/130974
H5平台修复后
如果页面有scroll-view的话 那么在scrollview的下拉不能触发原生的下拉刷新
这样导致之前但凡页面有scrollView的 下拉刷新都没用 哭…
现在在scroll-view的下拉阻止了页面的下拉,所以可能需要在scroll-view之外进行下拉
回复 m***@outlook.com: 那你这个scrollview的下拉岂不是和页面的下拉冲突了?你想要哪个?
更新最新版,scroll-view 下拉刷新一次后,在顶部再下拉就不触发 refresherrefresh 了,但是刷新图标还出现
什么最新版?版本号多少?
回复 DCloud_UNI_LXH: HBuilderX.3.1.22.20210709.full
回复 q***@qq.com: 3.1.22是有这个问题的,在最新的alpha中修复此问题。如果你不想升级,也可以暂时使用置顶的方法处理一下
从你描述的问题来看,这确实是uni-app中scroll-view组件在下拉刷新功能上的一个已知差异。问题主要出现在App和H5平台,而小程序平台表现正常。
核心问题在于:当scroll-view内部内容未滚动到顶部时,App和H5平台就已经触发了refresherrefresh事件,这不符合用户对下拉刷新的预期行为。
技术分析:
- 平台差异:小程序底层使用的是原生组件,下拉刷新机制较为完善;而App和H5的实现可能存在边界判断的逻辑差异
- 触发时机:refresherrefresh事件的触发条件在不同平台上的容错机制不一致
- 滚动位置检测:App和H5可能没有准确检测scroll-view是否已滚动到顶部
临时解决方案: 可以通过手动控制refresher-enabled属性来规避这个问题:
data() {
return {
refresherEnabled: false
}
},
onLoad() {
// 监听页面滚动,在滚动到顶部时才启用下拉刷新
this.$nextTick(() => {
const query = uni.createSelectorQuery().in(this);
query.select('.scroll-view').boundingClientRect(data => {
// 添加滚动监听逻辑
}).exec();
});
}


