解决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日期时间补零的小例子
Mar 05 Javascript
css transform 3D幻灯片特效实现步骤解读
Mar 27 Javascript
js实现prototype扩展的方法(字符串,日期,数组扩展)
Jan 14 Javascript
基于BootStrap Metronic开发框架经验小结【七】数据的导入、导出及附件的查看处理
May 12 Javascript
Canvas实现放射线动画效果
Feb 15 Javascript
vue实现app页面切换动画效果实例
May 23 Javascript
vue使用axios实现文件上传进度的实时更新详解
Dec 20 Javascript
vue项目中公用footer组件底部位置的适配问题
May 10 Javascript
写gulp遇到的ES6问题详解
Dec 03 Javascript
vue video和vue-video-player实现视频铺满教程
Oct 30 Javascript
vue 页面跳转的实现方式
Jan 12 Vue.js
JavaScript实现外溢动态爱心的效果的示例代码
Mar 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
JSON PHP中,Json字符串反序列化成对象/数组的方法
2018/05/31 PHP
javascript中的几个运算符
2007/06/29 Javascript
javascript 面向对象,实现namespace,class,继承,重载
2009/10/29 Javascript
js下用eval生成JSON对象
2010/09/17 Javascript
关于hashchangebroker和statehashable的补充文档
2011/08/08 Javascript
js自定义事件及事件交互原理概述(一)
2013/02/01 Javascript
深入理解javascript原型链和继承
2014/09/23 Javascript
用js判断是否为360浏览器的实现代码
2015/01/15 Javascript
JavaScript中子对象访问父对象的方式详解
2016/09/01 Javascript
详解js中Json的语法与格式
2016/11/22 Javascript
关于bootstrap日期转化,bootstrap-editable的简单使用,bootstrap-fileinput的使用详解
2017/05/12 Javascript
jquery.guide.js新版上线操作向导镂空提示jQuery插件(推荐)
2017/05/20 jQuery
JavaScript多线程运行库Nexus.js详解
2017/12/22 Javascript
vue实现选项卡及选项卡切换效果
2018/04/24 Javascript
cnpm加速Angular项目创建的方法
2018/09/07 Javascript
video.js 一个页面同时播放多个视频的实例代码
2018/11/27 Javascript
p5.js绘制创意自画像
2019/11/04 Javascript
Vue中rem与postcss-pxtorem的应用详解
2019/11/20 Javascript
详解Typescript 内置的模块导入兼容方式
2020/05/31 Javascript
python模拟登陆阿里妈妈生成商品推广链接
2014/04/03 Python
python字符串的常用操作方法小结
2016/05/21 Python
python 剪切移动文件的实现代码
2018/08/02 Python
符合语言习惯的 Python 优雅编程技巧【推荐】
2018/09/25 Python
详解多线程Django程序耗尽数据库连接的问题
2018/10/08 Python
Python常见数字运算操作实例小结
2019/03/22 Python
python抓取搜狗微信公众号文章
2019/04/01 Python
Python人脸识别第三方库face_recognition接口说明文档
2019/05/03 Python
pyqt5 使用label控件实时显示时间的实例
2019/06/14 Python
tensorflow如何批量读取图片
2019/08/29 Python
python科学计算之numpy——ufunc函数用法
2019/11/25 Python
pytorch-RNN进行回归曲线预测方式
2020/01/14 Python
易程科技软件测试笔试
2013/03/24 面试题
火锅店营销方案
2014/02/26 职场文书
导游词之无锡梅园
2019/11/28 职场文书
python3实现Dijkstra算法最短路径的实现
2021/05/12 Python
剖析后OpLog订阅MongoDB的数据变更就没那么难了
2022/02/24 MongoDB