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


Posted in Javascript onNovember 11, 2020

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>

补充知识:Vant与Element-ui出现Property '$notify' must be of type 'ElNotification'错误

遇到问题:

ERROR in /Users/oyo/projects/dataplatform/coconut/node_modules/vant/types/notify.d.ts 33:5 Subsequent property declarations must have the same type. Property ‘$notify' must be of type ‘ElNotification', but here has type ‘Notify'.

原因是两个组件库都在应用上添加了 $notify 方法;

解决方法是:只安装一个组件库, 另一个组件库按需引入

报错示例:

npm install vant element-ui

vant 和 element-ui 都有 $notify 方法, 会报错

import Vue from 'vue';
import Vant from 'vant';
import 'vant/lib/index.css';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';

Vue.use(Vant);
Vue.use(ElementUI);

解决方案:

import Vue from 'vue';
import Vant from 'vant';
import 'vant/lib/index.css';

// 按需引入你用到的组件, 而不是安装整个组件库
import ElButton from 'element-ui/lib/button';
import 'element-ui/lib/theme-chalk/button.css';

Vue.use(Vant);
Vue.component('el-button', ElButton);
tsconfig.json
{
 "compilerOptions": {
 "paths": {
  // 指向正确的声明映射
  "element-ui/lib/button": ["node_modules/element-ui/types/button"]
 }
 }
}

以上这篇解决vant框架做H5时踩过的坑(下拉刷新、上拉加载等)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
超级24小时弹窗代码 24小时退出弹窗代码 100%弹窗代码(IE only)
Jun 11 Javascript
Jquery ajaxStart()与ajaxStop()方法(实例讲解)
Dec 18 Javascript
JavaScript DOM节点添加示例
Jul 16 Javascript
JS实现网页Div层Clone拖拽效果
Sep 26 Javascript
js实现动态加载脚本的方法实例汇总
Nov 02 Javascript
JS在onclientclick里如何控制onclick的执行
May 30 Javascript
javascript容错处理代码(屏蔽js错误)
Jan 20 Javascript
微信小程序手势操作之单触摸点与多触摸点
Mar 10 Javascript
JavaScript实现设置默认日期范围为最近40天的方法分析
Jul 12 Javascript
ajax+node+request爬取网络图片的实例(宅男福利)
Aug 28 Javascript
微信小程序上传图片实例
May 28 Javascript
浅谈Vue static 静态资源路径 和 style问题
Nov 07 Javascript
JS前端基于canvas给图片添加水印
Nov 11 #Javascript
vant-ui框架的一个bug(解决切换后onload不触发)
Nov 11 #Javascript
使用Vant完成Dialog弹框案例
Nov 11 #Javascript
vue实现lodop打印功能的示例
Nov 11 #Javascript
解决vant的Toast组件时提示not defined的问题
Nov 11 #Javascript
vue mvvm数据响应实现
Nov 11 #Javascript
Js数组扁平化实现方法代码总汇
Nov 11 #Javascript
You might like
PHP中上传大体积文件时需要的设置
2006/10/09 PHP
php db类库进行数据库操作
2009/03/19 PHP
php绘图之生成饼状图的方法
2015/01/24 PHP
基础的WordPress插件制作教程
2015/11/24 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
2017/07/31 PHP
PHP实现生成数据字典功能示例
2018/05/24 PHP
div层的移动及性能优化
2010/11/16 Javascript
JS实现点击下载的小例子
2013/07/10 Javascript
Ubuntu中搭建Nodejs开发环境过程分享
2014/06/01 NodeJs
Javascript基础知识(二)事件
2014/09/29 Javascript
常用javascript表单验证汇总
2020/07/20 Javascript
限制文本框只能输入数字||只能是数字和小数点||只能是整数和浮点数
2016/05/27 Javascript
js 连续赋值的简单实现
2016/06/13 Javascript
jQuery实现的图片轮播效果完整示例
2016/09/12 Javascript
Javascript实现倒计时(防页面刷新)实例
2016/12/13 Javascript
jQuery实现基本动画效果的方法详解
2018/09/06 jQuery
Vue学习笔记之计算属性与侦听器用法
2019/12/07 Javascript
在JavaScript中实现链式调用的实现
2019/12/24 Javascript
python实现ip查询示例
2014/03/26 Python
pycharm中连接mysql数据库的步骤详解
2017/05/02 Python
Python元组拆包和具名元组解析实例详解
2018/03/26 Python
python找出完数的方法
2018/11/12 Python
Python自动抢红包教程详解
2019/06/11 Python
Django自定义用户登录认证示例代码
2019/06/30 Python
python输入多行字符串的方法总结
2019/07/02 Python
详解有关PyCharm安装库失败的问题的解决方法
2020/02/02 Python
Python 格式化输出_String Formatting_控制小数点位数的实例详解
2020/02/04 Python
Python 操作 PostgreSQL 数据库示例【连接、增删改查等】
2020/04/21 Python
基于CSS3实现的黑色个性导航菜单效果
2015/09/14 HTML / CSS
浙大网新C/C++面试解惑
2015/05/27 面试题
军训生自我鉴定范文
2013/12/27 职场文书
我爱我家教学反思
2014/05/01 职场文书
模具专业自荐信
2014/05/29 职场文书
Python Numpy之linspace用法说明
2021/04/17 Python
用 Python 定义 Schema 并生成 Parquet 文件详情
2021/09/25 Python
一文解答什么是MySQL的回表
2022/08/05 MySQL