解决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 相关文章推荐
IE与FireFox的兼容性问题分析
Apr 22 Javascript
Javascript new关键字的玄机 以及其它
Aug 25 Javascript
JavaScript Serializer序列化时间处理示例
Jul 31 Javascript
jQuery的one()方法用法实例
Jan 19 Javascript
如何用javascript计算文本框还能输入多少个字符
Jul 29 Javascript
jQuery针对input的class属性写了多个值情况下的选择方法
Jun 03 Javascript
jQuery基本选择器和层次选择器学习使用
Feb 27 Javascript
移动端(微信等使用vConsole调试console的方法
Mar 05 Javascript
Vue 中文本内容超出规定行数后展开收起的处理的实现方法
Apr 28 Javascript
JavaScript JSON使用原理及注意事项
Jul 30 Javascript
JavaScript实现拖拽和缩放效果
Aug 24 Javascript
微前端qiankun改造日渐庞大的项目教程
Jun 21 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与已存在的Java应用程序集成
2006/10/09 PHP
php笔记之:php数组相关函数的使用
2013/04/26 PHP
教你如何解密 “ PHP 神盾解密工具 ”
2014/06/20 PHP
ExtJS 2.0 实用简明教程之布局概述
2009/04/29 Javascript
JavaScript基础知识学习笔记
2014/12/02 Javascript
jQuery实现仿Google首页拖动效果的方法
2015/05/04 Javascript
jQuery 获取多选框的值及多选框中文的函数
2016/05/16 Javascript
完美实现八种js焦点轮播图(上篇)
2016/07/18 Javascript
js enter键激发事件实例代码
2016/08/17 Javascript
jquery validation验证表单插件
2017/01/07 Javascript
原生JS进行前后端同构
2018/04/22 Javascript
JavaScript实现获取两个排序数组的中位数算法示例
2019/02/26 Javascript
微信小程序实现图片上传
2019/05/23 Javascript
layer提示框添加多个按钮选择的实例
2019/09/12 Javascript
浅析JS中NEW的实现原理及重写
2020/02/20 Javascript
浅谈JSON5解决了JSON的两大痛点
2020/12/14 Javascript
用pandas按列合并两个文件的实例
2018/04/12 Python
Python实现自定义顺序、排列写入数据到Excel的方法
2018/04/23 Python
基于python的多进程共享变量正确打开方式
2018/04/28 Python
python随机在一张图像上截取任意大小图片的方法
2019/01/24 Python
python图像处理入门(一)
2019/04/04 Python
Python 计算任意两向量之间的夹角方法
2019/07/05 Python
Python 分发包中添加额外文件的方法
2019/08/16 Python
Windows下PyCharm2018.3.2 安装教程(图文详解)
2019/10/24 Python
Python Sympy计算梯度、散度和旋度的实例
2019/12/06 Python
Html5写一个简单的俄罗斯方块小游戏
2019/12/03 HTML / CSS
怀旧收藏品和经典纪念品:Betty’s Attic
2018/08/29 全球购物
Holland & Barrett爱尔兰:英国领先的健康零售商
2019/03/31 全球购物
ESDlife健康生活易:身体检查预订、搜寻及比较
2019/05/10 全球购物
优秀求职信范文分享
2013/12/19 职场文书
高中打架检讨书
2014/02/13 职场文书
财务总监岗位职责
2014/03/07 职场文书
农村产权制度改革实施方案
2014/03/21 职场文书
保密承诺书
2014/03/27 职场文书
新学期开学演讲稿
2014/05/24 职场文书
2014个人年度工作总结
2014/12/15 职场文书