移动端H5页面使用Vant组件库下拉刷新和页面滚动事件冲突

Vant组件库van-pull-refresh踩坑

van-pull-refresh在开发过程会和内容中最近的拥有overflow的元素的滚动发生冲突,造成向上滑动的时候会下拉加载

javascript 复制代码
<van-pull-refresh v-model="refreshing"  @refresh="onRefresh">
    <van-list
              v-model="refreshFlag"
              offset="20"
              finished-text="刷新成功"
              pulling-text="下拉可以刷新"
              loosing-text="松开立即刷新"
              @refresh="onRefresh"
              :pull-distance="80"
              :disabled="refreshDisabled"
              :immediate-check="false"
              >
        <van-cell v-for="item in list" :key="item.id" :title="item" />
    </van-list>
</van-pull-refresh>

目前使用的,并且已经解决问题的方法是通过通过设置::disabled="refreshDisabled" ,限制滚动实现的。

原理是:当滚动元素的scrollTop === 0 的时候,再下拉说明是下拉加载,然后更该:refreshDisabled的值为false,就可以实现加载了。

javascript 复制代码
const refreshDisabled = ref(false);
const content = ref()

const handleScroll = (event) => {
  // <el-table>...</el-table>
  // 有一些组件原本的自带的滚动不一定是scrollTop,比如el-table是.bodyWrapper.scrollTop
  const scrollTop = event.target.scrollTop
  if(scrollTop<=0){
    refreshDisabled.value = false
  }else{
    refreshDisabled.value = true
  }
}
onMounted(async()=>{
  content.value.addEventListener('scroll', handleScroll)
})
onUnmounted (()=>{
	content.value.removeEventListener('scroll', handleScroll)
})

仅供参考

相关推荐
东风破_1 小时前
TypeScript 高级类型进阶:keyof、Exclude、Record 与类型组合思想
前端·后端·typescript
DS随心转插件1 小时前
Grok生成的html怎么导出——AI导出鸭:大模型结构化输出的“最后一公里”工程化解构
前端·人工智能·ai·html·豆包·deepseek·ai导出鸭
এ慕ོ冬℘゜2 小时前
使用 jQuery 动态渲染表格与状态切换
前端·javascript·jquery
人间凡尔赛2 小时前
2026 前端必修:4 个让 CSS 脱胎换骨的现代新特性(附实战代码)
前端·css
用户2181697049302 小时前
Flutter (二十) 轮播图
前端
前端snow2 小时前
ai agent - RAG 汇总
前端
计算机魔术师3 小时前
AI为拿高分不惜入侵网站:22个模型作弊审计,真相让人背脊发凉
前端
晓说前端3 小时前
TypeScript 核心语法应用 —— Vue 3 中的使用(下)
前端·javascript·typescript·类型系统
zhangminghuan3 小时前
微信小程序开发核心知识点全景解析(前端必备硬核基础)
前端·微信小程序·小程序
boooooooom3 小时前
尝尝咸淡:从朴素 RAG 到 Graph RAG——一个烹饪问答系统的三层检索升级之路
前端·后端·llm