解决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 相关文章推荐
js tab效果的实现代码
Dec 26 Javascript
js插件方式打开pdf文件(浏览器pdf插件分享)
Dec 20 Javascript
jquery图片切换插件
Mar 16 Javascript
防止Node.js中错误导致进程阻塞的办法
Aug 11 Javascript
DOM 事件的深入浅出(二)
Dec 05 Javascript
JS实现的简易拖放效果示例
Dec 29 Javascript
在JavaScript中使用严格模式(Strict Mode)
Jun 13 Javascript
在Node.js中将SVG图像转换为PNG,JPEG,TIFF,WEBP和HEIF格式的方法
Aug 22 Javascript
JavaScript简单编程实例学习
Feb 14 Javascript
Nuxt页面级缓存的实现
Mar 09 Javascript
Vue watch响应数据实现方法解析
Jul 10 Javascript
解决vue的router组件component在import时不能使用变量问题
Jul 26 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
phpexcel导入excel数据使用方法实例
2013/12/24 PHP
PHP实现查询两个数组中不同元素的方法
2016/02/23 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
2016/05/20 PHP
PHP文件操作实例总结
2016/09/27 PHP
js+CSS 图片等比缩小并垂直居中实现代码
2008/12/01 Javascript
在网页里看flash的trace数据的js类
2009/01/10 Javascript
jquery 双色表格实现代码
2009/12/08 Javascript
JavaScript中的getTime()方法使用详解
2015/06/10 Javascript
AngularJS仿苹果滑屏删除控件
2016/01/18 Javascript
jquery把int类型转换成字符串类型的方法
2016/10/07 Javascript
ie下js不执行的几种可能
2017/02/28 Javascript
微信小程序中使用wxss加载图片并实现动画效果
2018/08/13 Javascript
webgl实现物体描边效果的方法介绍
2019/11/27 Javascript
详解如何在JS代码中消灭for循环
2019/12/11 Javascript
JS实现小星星特效
2019/12/24 Javascript
Windows下安装 node 的版本控制工具 nvm
2020/02/06 Javascript
vue中v-model对select的绑定操作
2020/08/31 Javascript
如何编写一个 Webpack Loader的实现
2020/10/18 Javascript
python 切片和range()用法说明
2013/03/24 Python
python Django连接MySQL数据库做增删改查
2013/11/07 Python
python 计算两个日期相差多少个月实例代码
2017/05/24 Python
Python基于TCP实现会聊天的小机器人功能示例
2018/04/09 Python
python selenium自动上传有赞单号的操作方法
2018/07/05 Python
python 修改本地网络配置的方法
2019/08/14 Python
python getpass模块用法及实例详解
2019/10/07 Python
Python Django模板之模板过滤器与自定义模板过滤器示例
2019/10/18 Python
基于torch.where和布尔索引的速度比较
2020/01/02 Python
Python基础之字符串操作常用函数集合
2020/02/09 Python
tensorflow图像裁剪进行数据增强操作
2020/06/30 Python
python递归函数用法详解
2020/10/26 Python
YSL圣罗兰美妆俄罗斯官网:Yves Saint Lauret RU
2020/09/23 全球购物
2014年健康教育实施方案
2014/02/17 职场文书
购房委托书
2014/10/15 职场文书
解决Golang中ResponseWriter的一个坑
2021/04/27 Golang
Python编程中Python与GIL互斥锁关系作用分析
2021/09/15 Python
Apache Kafka 分区重分配的实现原理解析
2022/07/15 Servers