用vant框架做H5时踩过的坑(下拉刷新、上拉加载等)

本文介绍了使用vant框架构建H5页面时遇到的常见问题及解决方案,包括页面在手机端无法滑动、下拉刷新过于敏感、上拉加载内容不完整以及加载重复等问题,并详细分析了问题原因及提供的修复方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用vant框架做H5时踩过的坑

1. 页面在手机端不能上下滑动,在PC端浏览器正常滑动

说明:在设置了overflow:auto;属性的前提下,H5页面在PC端浏览器里展示可以上下滑动,在ios上可正常滑动,在安卓手机 上不能上下滑动;这现象并不是ios和安卓兼容性问题!
原因:设置了touch-action: none;这属性为局部或者全局属性,将这条属性注释即可正常滑动。

2.使用PullRefresh和List列表实现下拉刷新和上拉加载时出现的问题

问题1. 下拉刷新时在手机上,不论滑到任何位置,只要下拉就刷新
原因:滑动的区间设置错了,此时滑动的区间应是此组件的父盒子,我将overflow:scroll设置给了最外层盒子
问题2. 上拉加载时展示的列表始终只包含当前某一页,而不是当前页和加载出的那一页
原因:请求接口的参数不应该是current++,也就是不应该是当前页数+1,而是始终保持当前页数,请求的size=current*size
问题3. 下拉时,当数据很少的情况下,页面的最下面部分被遮住
原因:给van-list设置了height,且height: 80%,van-list必须设置高,否则无法滑动
解决办法:设置最小高:min-height: calc(100vh - 100px); overflow: hidden;
问题4.上拉加载时出现重复加载问题
van-list的属性finished触发时间错误,如果直接放在@load方法中,则会出现一直请求加载
解决办法:将finished=true放在请求接口返回数据的方法里,当当前页面数据大于等于返回的总条数,finished=true,显示加载完成,不再触发load加载事件。
注:附上下拉刷新、上拉加载部分的代码
<template>
<van-pull-refresh v-model="isLoading" :head-height="20" @refresh="onRefresh">
      <van-list
        v-model="loading"
        :finished="finished"
        :offset="1"
        :immediate-check="false"
        :error.sync="error"
        finished-text="已全部加载完成"
        error-text="请求失败,点击重新加载"
        @load="onLoadList"
      >
      </van-list>
</van-pull-refresh>
</template>
<script>
data(){
	return {
		isLoading: false,
		finished: false,
		loading: false,
	}
},
methods:{
	getVideoList() {
      getVideoList(this.current, this.selectDisposeStatus, 				this.searchValue).then(resp => {
        this.videoList = resp.data.records
        this.isVideoList = false
        if (this.videoList.length >= resp.data.total) {
          this.finished = true
        }
      }).catch(() => {
        this.error = true
      })
    },
	onRefresh() {
      this.current = 1
      this.getVideoList()
      this.isLoading = false
      this.$toast('刷新成功')
    },
    onLoadList() {
      this.current++
      this.loading = false
      this.getVideoList()
      this.$toast('加载成功')
    },
}
	
</script>
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值