解决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 相关文章推荐
JavaScript 封装Ajax传递的数据代码
Jun 05 Javascript
在一个浏览器里呈现所有浏览器测试结果的前端测试工具的思路
Mar 02 Javascript
node.js操作mongoDB数据库示例分享
Nov 26 Javascript
在Mac OS下使用Node.js的简单教程
Jun 24 Javascript
AngularJS 自定义过滤器详解及实例代码
Sep 14 Javascript
JQuery实现文字无缝滚动效果示例代码(Marquee插件)
Mar 07 Javascript
Jquery把获取到的input值转换成json
May 15 jQuery
解决Linux无法正常安装与卸载Node.js的方法
Jan 19 Javascript
使用javascript做在线算法编程
May 25 Javascript
详解vue如何使用rules对表单字段进行校验
Oct 17 Javascript
利用原生JavaScript实现造日历轮子实例代码
May 08 Javascript
vue实践---根据不同环境,自动转换请求的url地址操作
Sep 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基础知识:类与对象(1)
2006/12/13 PHP
memcached 和 mysql 主从环境下php开发代码详解
2010/05/16 PHP
PHP Opcache安装和配置方法介绍
2015/05/28 PHP
PHP+JS三级菜单联动菜单实现方法
2016/02/24 PHP
谈谈php对接芝麻信用踩的坑
2016/12/01 PHP
jQuery 源码分析笔记(6) jQuery.data
2011/06/08 Javascript
JavaScript高级程序设计 学习笔记 js高级技巧
2011/09/20 Javascript
javascript算法题 求任意一个1-9位不重复的N位数在该组合中的大小排列序号
2012/07/21 Javascript
JS、DOM和JQuery之间的关系示例分析
2014/04/09 Javascript
jquery实现显示已选用户
2014/07/21 Javascript
JavaScript实现彩虹文字效果的方法
2015/04/16 Javascript
浅谈jQuery中setInterval()方法
2015/07/07 Javascript
js实现的二级横向菜单条实例
2015/08/22 Javascript
js实现商城星星评分的效果
2015/12/29 Javascript
JS组件Bootstrap ContextMenu右键菜单使用方法
2016/04/17 Javascript
基于Vue2的移动端开发环境搭建详解
2016/11/03 Javascript
javascript中json对象json数组json字符串互转及取值方法
2017/04/19 Javascript
VSCode中如何利用d.ts文件进行js智能提示
2018/04/13 Javascript
使用express来代理服务的方法
2019/06/21 Javascript
vue与django集成打包的实现方法
2019/11/11 Javascript
基于redis的小程序登录实现方法流程分析
2020/05/25 Javascript
python实现class对象转换成json/字典的方法
2016/03/11 Python
Python匹配中文的正则表达式
2016/05/11 Python
python 获取字符串MD5值方法
2018/05/29 Python
详解Python list和numpy array的存储和读取方法
2019/11/06 Python
Python 寻找局部最高点的实现
2019/12/05 Python
python热力图实现简单方法
2021/01/29 Python
印度最大的酒店品牌网络:OYO Rooms
2016/07/24 全球购物
汽车电子与维修专业大学生求职信
2013/09/28 职场文书
24岁生日感言
2014/01/13 职场文书
关于梦想的演讲稿
2014/05/05 职场文书
环境整治工作方案
2014/05/18 职场文书
党章培训心得体会
2014/09/04 职场文书
质量保证书
2015/01/17 职场文书
创业计划书之书店
2019/09/10 职场文书
教你快速构建一个基于nginx的web集群项目
2021/11/27 Servers