解决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 相关文章推荐
jquery实现弹出窗口效果的实例代码
Nov 28 Javascript
简单的邮箱登陆的提示效果类似于yahoo邮箱
Feb 26 Javascript
Javascript中apply、call、bind的巧妙使用
Aug 18 Javascript
在Docker快速部署Node.js应用的详细步骤
Sep 02 Javascript
vue实现添加标签demo示例代码
Jan 21 Javascript
详解react-router4 异步加载路由两种方法
Sep 12 Javascript
Vue实现数字输入框中分割手机号码的示例
Oct 10 Javascript
js 图片转base64的方式(两种)
Apr 24 Javascript
浅谈redux, koa, express 中间件实现对比解析
May 23 Javascript
js实现贪吃蛇小游戏
Oct 29 Javascript
详解Angular Karma测试的持续集成实践
Nov 15 Javascript
深入分析jQuery.one() 函数
Jun 03 jQuery
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开发入门教程之面向对象
2006/12/05 PHP
php基础知识:类与对象(2) 自动加载对象
2006/12/13 PHP
基于MySQL体系结构的分析
2013/05/02 PHP
使用pthreads实现真正的PHP多线程(需PHP5.3以上版本)
2014/05/05 PHP
php数组中包含中文的排序方法
2014/06/03 PHP
php用xpath解析html的代码实例讲解
2019/02/14 PHP
JS控制显示隐藏兼容问题(IE6、IE7、IE8)
2010/04/01 Javascript
jcrop基本参数一览
2013/07/16 Javascript
js下将阿拉伯数字每三位一逗号分隔(如:15000000转化为15,000,000)
2014/06/02 Javascript
javascript框架设计读书笔记之数组的扩展与修复
2014/12/02 Javascript
javascript正则表达式之search()用法实例
2015/01/19 Javascript
jquery实现的蓝色二级导航条效果代码
2015/08/24 Javascript
AngularJS教程 ng-style 指令简单示例
2016/08/03 Javascript
移动端日期插件Mobiscroll.js使用详解
2016/12/19 Javascript
ReactNative之键盘Keyboard的弹出与消失示例
2017/07/11 Javascript
Javascript的this详解
2019/03/23 Javascript
详解在Javascript中进行面向切面编程
2019/04/28 Javascript
vue百度地图 + 定位的详解
2019/05/13 Javascript
JS原型和原型链原理与用法实例详解
2020/02/05 Javascript
Python实现给qq邮箱发送邮件的方法
2015/05/28 Python
python3连接MySQL数据库实例详解
2018/05/24 Python
Python开发之Nginx+uWSGI+virtualenv多项目部署教程
2019/05/13 Python
Python变量作用域LEGB用法解析
2020/02/04 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
2020/11/27 Python
泰国汽车、火车和轮渡票预订网站:Bus Online Ticket
2017/09/09 全球购物
Under Armour澳大利亚官网:美国知名的高端功能性运动品牌
2018/02/22 全球购物
专注澳大利亚特产和新西兰特产的澳洲中文网:0061澳洲制造
2019/03/24 全球购物
婚鞋、新娘鞋、礼服鞋、童鞋:Nina Shoes
2019/09/04 全球购物
介绍一下HTTP、HTTPS和SSL
2012/12/16 面试题
Overload和Override的区别
2012/09/02 面试题
乡镇挂职心得体会
2014/09/04 职场文书
先进班组材料范文
2014/12/25 职场文书
小升初自荐信范文
2015/03/05 职场文书
小学四年级作文之人物作文
2019/11/06 职场文书
AJAX学习笔记
2021/05/18 Javascript
前端使用svg图片改色实现示例
2022/07/23 HTML / CSS