解决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实现的激活输入框后隐藏初始内容
Jun 29 Javascript
ImageFlow可鼠标控制图片滚动
Jan 30 Javascript
jquery ui对话框实例代码
May 10 Javascript
js unicode 编码解析关于数据转换为中文的两种方法
Apr 21 Javascript
分享javascript、jquery实用代码段
Oct 20 Javascript
AngularJS报错$apply already in progress的解决方法分析
Jan 30 Javascript
js时间戳和c#时间戳互转方法(推荐)
Feb 15 Javascript
微信小程序 配置顶部导航条标题颜色的实现方法
Sep 20 Javascript
webpack将js打包后的map文件详解
Feb 22 Javascript
js变量声明var使用与不使用的区别详解
Jan 21 Javascript
Object.keys() 和 Object.getOwnPropertyNames() 的区别详解
May 21 Javascript
vue 使用lodash实现对象数组深拷贝操作
Sep 10 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通过cookies获取远程网页的指定代码
2013/06/25 PHP
使用Codeigniter重写insert的方法(推荐)
2017/03/23 PHP
ExtJS 2.0实用简明教程 之获得ExtJS
2009/04/29 Javascript
页面调用单个swf文件,嵌套出多个方法。
2011/11/21 Javascript
子页向父页传值示例
2013/11/27 Javascript
node.js中的buffer.Buffer.isEncoding方法使用说明
2014/12/14 Javascript
JavaScript实现鼠标滑过处生成气泡的方法
2015/05/16 Javascript
解决JS无法调用Controller问题的方法
2015/12/31 Javascript
jQuery Form 表单提交插件之formSerialize,fieldSerialize,fieldValue,resetForm,clearForm,clearFields的应用
2016/01/23 Javascript
JS实现数组去重复值的方法示例
2017/02/18 Javascript
JS中把函数作为另一函数的参数传递方法(总结)
2017/06/28 Javascript
VUE实现表单元素双向绑定(总结)
2017/08/08 Javascript
通过jquery toggleClass()属性制作文章段落更改背景颜色
2018/05/21 jQuery
Vue父子组件双向绑定传值的实现方法
2018/07/31 Javascript
JavaScript自动生成 年月范围 选择功能完整示例【基于jQuery插件】
2019/09/03 jQuery
[01:08:33]OG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python进阶教程之循环相关函数range、enumerate、zip
2014/08/30 Python
python求crc32值的方法
2014/10/05 Python
Python模块WSGI使用详解
2018/02/02 Python
Python3.6实现连接mysql或mariadb的方法分析
2018/05/18 Python
python分批定量读取文件内容,输出到不同文件中的方法
2018/12/08 Python
基于Python执行dos命令并获取输出的结果
2019/12/30 Python
用pytorch的nn.Module构造简单全链接层实例
2020/01/14 Python
Pycharm IDE的安装和使用教程详解
2020/04/30 Python
解决Alexnet训练模型在每个epoch中准确率和loss都会一升一降问题
2020/06/17 Python
Pytorch实现将模型的所有参数的梯度清0
2020/06/24 Python
Python实时监控网站浏览记录实现过程详解
2020/07/14 Python
Html5页面在微信端的分享的实现方法
2018/08/30 HTML / CSS
介绍一下write命令
2012/09/24 面试题
优秀小学生家长评语
2014/01/30 职场文书
我是一名护士演讲稿
2014/08/28 职场文书
2014年领导班子专项整治整改方案
2014/09/28 职场文书
五年级学生评语大全
2014/12/26 职场文书
2015毕业实习推荐信
2015/03/23 职场文书
2015年教学管理工作总结
2015/05/20 职场文书
小鞋子观后感
2015/06/05 职场文书