uni-app中<scroll-view :scroll-x="true" >与"enablePullDownRefresh": true存在冲突

发布于 1周前 作者 htzhanglong 来自 Uni-App

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.


3 回复

一般 scroll-view 组件 不和 页面级别enablePullDownRefresh ,一起使用,两个是同一个动作,是会冲突


那有刷新页面的横向滚动怎么办

uni-app 中,<scroll-view> 组件的 scroll-x 属性和页面配置中的 "enablePullDownRefresh": true 可能存在冲突。这是因为两者的滚动机制不同,可能会导致页面行为异常。

冲突原因

  1. scroll-viewscroll-x 属性:用于实现水平滚动。scroll-view 是一个独立的滚动容器,它会接管其内部的滚动行为。
  2. enablePullDownRefresh:用于启用页面的下拉刷新功能。下拉刷新是基于页面级别的滚动行为,需要页面本身能够垂直滚动。

当你在一个页面中同时使用 <scroll-view :scroll-x="true">"enablePullDownRefresh": true 时,可能会出现以下问题:

  • scroll-view 接管了滚动行为,导致页面的下拉刷新无法触发。
  • 页面的垂直滚动被 scroll-view 限制,无法正常工作。

解决方案

  1. 避免在需要下拉刷新的页面中使用 scroll-view:如果页面需要下拉刷新功能,尽量避免使用 scroll-view,特别是水平滚动的 scroll-view。可以使用其他布局方式来实现水平滚动,比如 swiper 组件。

  2. 使用 scroll-viewscroll-y 属性:如果你需要在 scroll-view 中实现垂直滚动,并且同时需要下拉刷新功能,可以考虑使用 scroll-viewscroll-y 属性,并在 scroll-view 中手动实现下拉刷新逻辑。

  3. 自定义下拉刷新:如果你确实需要在 scroll-view 中实现下拉刷新,可以考虑使用自定义的下拉刷新组件,而不是依赖 enablePullDownRefreshuni-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>
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!