uni-app中<scroll-view :scroll-x="true" >与"enablePullDownRefresh": true存在冲突
uni-app中<scroll-view :scroll-x="true" >与"enablePullDownRefresh": true存在冲突
信息类别 | 详细信息 |
---|---|
产品分类 | uniapp/App |
PC开发环境 | Windows |
PC版本号 | win10 |
HBuilderX | 正式版 |
HBuilderX版本 | 3.98 |
手机系统 | Android |
手机版本号 | Android 13 |
手机厂商 | 华为 |
手机机型 | h5 |
页面类型 | vue |
vue版本 | vue3 |
打包方式 | 云端 |
项目创建方式 | HBuilderX |
示例代码:
<scroll-view :scroll-x="true" class="scene-scroll" >
<view class="u-flex-conter" :style="{width:3*265+'rpx'}">
<view class=" u-overflow scene-list-card"
v-for="(item,index) in 3" :key="index">{{item}}</view>
</view>
</scroll-view>
{
"path": "pages/index/index",
"style": {
"navigationBarTitleText": "首页",
"enablePullDownRefresh": true,
"navigationStyle": "custom",
"app-plus": {
"bounce": false
}
}
}
操作步骤:
浏览器调试enablePullDownRefresh
: true, 页面横向滑动 <scroll-view>
会报错 [Intervention] Ignored attempt to cancel a touchmove event with cancelable=false, for example because scrolling is in progress and cannot be interrupted.
预期结果:
不报错
实际结果:
报错 [Intervention] Ignored attempt to cancel a touchmove event with cancelable=false, for example because scrolling is in progress and cannot be interrupted.
bug描述:
【报Bug】<scroll-view :scroll-x="true" >
和 "enablePullDownRefresh": true,
冲突
滑动会报错 [Intervention] Ignored attempt to cancel a touchmove event with cancelable=false, for example because scrolling is in progress and cannot be interrupted.
一般 scroll-view 组件 不和 页面级别enablePullDownRefresh ,一起使用,两个是同一个动作,是会冲突
那有刷新页面的横向滚动怎么办
在 uni-app
中,<scroll-view>
组件的 scroll-x
属性和页面配置中的 "enablePullDownRefresh": true
可能存在冲突。这是因为两者的滚动机制不同,可能会导致页面行为异常。
冲突原因
scroll-view
的scroll-x
属性:用于实现水平滚动。scroll-view
是一个独立的滚动容器,它会接管其内部的滚动行为。enablePullDownRefresh
:用于启用页面的下拉刷新功能。下拉刷新是基于页面级别的滚动行为,需要页面本身能够垂直滚动。
当你在一个页面中同时使用 <scroll-view :scroll-x="true">
和 "enablePullDownRefresh": true
时,可能会出现以下问题:
scroll-view
接管了滚动行为,导致页面的下拉刷新无法触发。- 页面的垂直滚动被
scroll-view
限制,无法正常工作。
解决方案
-
避免在需要下拉刷新的页面中使用
scroll-view
:如果页面需要下拉刷新功能,尽量避免使用scroll-view
,特别是水平滚动的scroll-view
。可以使用其他布局方式来实现水平滚动,比如swiper
组件。 -
使用
scroll-view
的scroll-y
属性:如果你需要在scroll-view
中实现垂直滚动,并且同时需要下拉刷新功能,可以考虑使用scroll-view
的scroll-y
属性,并在scroll-view
中手动实现下拉刷新逻辑。 -
自定义下拉刷新:如果你确实需要在
scroll-view
中实现下拉刷新,可以考虑使用自定义的下拉刷新组件,而不是依赖enablePullDownRefresh
。uni-app
提供了onPullDownRefresh
生命周期函数,你可以通过监听scroll-view
的滚动事件来手动触发下拉刷新。
示例代码
<template>
<view>
<scroll-view :scroll-y="true" @scrolltolower="onScrollToLower" @scroll="onScroll">
<!-- 你的内容 -->
</scroll-view>
</view>
</template>
<script>
export default {
data() {
return {
isRefreshing: false
};
},
methods: {
onScroll(e) {
// 手动判断是否触发下拉刷新
if (e.detail.scrollTop <= -50 && !this.isRefreshing) {
this.isRefreshing = true;
this.onPullDownRefresh();
}
},
onScrollToLower() {
// 滚动到底部时触发加载更多
this.loadMore();
},
onPullDownRefresh() {
// 执行下拉刷新逻辑
setTimeout(() => {
this.isRefreshing = false;
uni.stopPullDownRefresh();
}, 2000);
},
loadMore() {
// 执行加载更多逻辑
}
}
};
</script>
<style>
/* 样式 */
</style>