vue使用vant-ui实现上拉加载、下拉刷新和返回顶部
vue使用vant-ui实现上拉加载、下拉刷新和返回顶部
vue现在在移动端常用的ui库有vant-ui和mint-ui,上拉加载、下拉刷新和返回顶部也是移动端最基础最常见的功能。下面就用vant-ui来实现在三个功能。
首先,你需要安装好了vant,做好了相关配置 ,如果没有,请参考vant的官方文档 https://youzan.github.io/vant/#/zh-CN/quickstart
这里使用的自动按需加载的方式 。做好这些之后,你需要引入组件 ,自动按需加载的只是css和js。
import Vue from 'vue' //引入vue
import { Icon, List, PullRefresh } from 'vant' //引入字体图标,列表, 下拉刷新
Vue.use(List);
Vue.use(PullRefresh);
下面的组件的使用和官方文档中也是一样的
<van-list
v-model="loading"
:finished="finished"
finished-text="没有更多了"
@load="onLoad"
>
<van-pull-refresh v-model="isLoading" @refresh="onRefresh(-1)">
。。。 //列表内容,需要加载和刷新的部分
</van-pull-refresh>
<van-cell
v-for="item in list"
:key="item"
:title="item"
/>
</van-list>
export default {
data() {
return {
flag_scroll: false,
loading: false,
finished: false,
isLoading: false,
page:1,
};
},
methods: {
//上拉加载
//异步请求数据 ,我们的项目时封装好的方法,此处只是调用
onLoad(code){
let body = {}
body.page = this.page
body.lifecycleStatus = code //传递的参数
this.getMaintenanceMoreList({
body,
failure: (resData) => {
},
//上面的这些都不需要理会,只要记得在数据请求成功的回调里做以下操作:
success: (resData) => {
this.loading = false; //数据请成功后
this.page++ //页码要增加1
if(resData.data.rows.length == 0){//如果返回数据为空,则显示没有数据了。。。
this.finished = true;
}
}
})
},
}
需要注意的点:
- 请求成功后
this.loading = false- 页码自增
this.page++- 判断是否还有数据,如果已经全部请求出来了,
this.finished = true- 拼接数组 state.MAIMTENANCE_LIST = [... state.MAIMTENANCE_LIST, ...resData.data.rows]
因为项目中用的状态管理器,所以数据的处理是在store里进行操作的,只需要讲请求回的列表的数据进行拼接即可state.MAIMTENANCE_LIST = [... state.MAIMTENANCE_LIST, ...resData.data.rows]
下拉刷新:
onRefresh() {
this.finished = false;
this.page = 1
this.getList()//正常的请求数据的方法,数组重新赋值
},
//列表请求会在多处使用,所以放在了一个方法里
getList () {
let body = {}
body.page = this.page
this.getMaintenanceList({
body,
failure: (resData) => {
},
success: (resData) => {
this.isLoading = false;
this.page++
}
})
}
注意事项:
- this.finished = false; 上拉加载完数据之后 this.finished = false,如果不设置为false,下拉刷新之后上拉加载将不会执行
- this.page = 1 上拉加载时this.page的值已经发生变化,下拉刷新之后页面显示的首屏的数据 ,上拉时要重新加载分页。
- this.isLoading = false; this.isLoading = true的情况下数据请求成功但是不会继续往下执行,为false之后才会继续执行
- this.page++ 是为了上拉加载做准备,首屏已经加载,继续上拉需要加载的是第二页的内容
返回顶部是最容易实现的了,请看:
<van-button type="default" class="backTop" @click="backTop" v-show="flag_scroll">
<van-icon name="arrow-up" size="20" />
</van-button>
//在methods里定义方法
backTop(){
document.getElementsByClassName('equi_container')[0].scrollTop = 0
},
这就可以啦。。。点击按钮,让滚动条高度为0.
注意:是给滚动的父元素设置,也就是设置了
overflow:auto的元素
如果不想让按钮在一开始的时候存在,而是在滚动了一定的距离的时候再出现,那设置 一个滚动条的监听就搞定啦,
mounted() {
window.addEventListener('scroll', this.handleScroll, true)
},
//methods中定义事件
handleScroll(env){
let scrollTop = document.getElementsByClassName('equi_container')[0].scrollTop
if(scrollTop > 100){
this.flag_scroll = true
}else {
this.flag_scroll = false
}
},
前提是,你要在data中定义属性flag_scroll,并设置按钮的v-if或者v-show,建议使用v-show
注意:按钮要设置固定定位,按钮最好设置边框,会好看。
写的有点乱,望大神指点,希望能给予需要的人一点点的帮助,有不明白的欢迎留言,谢谢!
vue使用vant-ui实现上拉加载、下拉刷新和返回顶部的更多相关文章
- Vue mint ui用在消息页面上拉加载下拉刷新loadmore 标记
之前总结过一个页面存在多个下拉加载的处理方式,今天再来说一下在消息页面的上拉加载和下拉刷新,基本上每个app都会有消息页面,会遇到这个需求 需求:每次加载十条数据,上拉加载下拉刷新,并且没有点击查看过 ...
- 上拉加载下拉刷新控件WaterRefreshLoadMoreView
上拉加载下拉刷新控件WaterRefreshLoadMoreView 效果: 源码: // // SRSlimeView // @author SR // Modified by JunHan on ...
- RecyclerView 上拉加载下拉刷新
RecyclerView 上拉加载下拉刷新 <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/teach_s ...
- APICloud上啦加载下拉刷新模块
apicloud有自带的上啦加载下拉刷新,当让也可以用第三方或者在模块库里面找一个使用 一.下拉刷新,一下代码写在 apiready = function (){} 里面 apiready = fun ...
- 微信小程序上拉加载下拉刷新
微信小程序实现上拉加载下拉刷新 使用小程序默认提供方法. (1). 在xxx.json 中开启下拉刷新,需要设置backgroundColor,或者是backgroundTextStyle ,因为加载 ...
- mui scroll和上拉加载/下拉刷新
mui中 scroll和上拉加载/下拉刷新同时存在会出现两个滚动条 把/* */ /* //mui页面鼠标拖动代码: mui('.mui-scroll-wrapper').scroll({ dec ...
- 移动端上拉加载下拉刷新插件-mescroll.js插件
官网地址是:http://www.mescroll.com // 初始化mescroll function initMeScroll() { //创建MeScroll对象,内部已默认开启下拉刷新,自动 ...
- Flutter上拉加载下拉刷新---flutter_easyrefresh
前言 Flutter默认不支持上拉加载,下拉刷新也仅仅支持Material的一种样式.Android开发使用过SmartRefreshLayout的小伙伴都知道这是一个强大的刷新UI库,集成了很多出色 ...
- 基于better-scroll封装一个上拉加载下拉刷新组件
1.起因 上拉加载和下拉刷新在移动端项目中是很常见的需求,遂自己便基于better-scroll封装了一个下拉刷新上拉加载组件. 2.过程 better-scroll是目前比较好用的开源滚动库,提供很 ...
- SwipeRefreshLayout实现上拉加载下拉刷新
package com.example.swiperefreshlayoutdemo; import java.util.ArrayList;import java.util.HashMap; imp ...
随机推荐
- CH 4302 Interval GCD 题解
题意 给定一个长度为N的数列A,以及M条指令 (N≤5* 10^5, M<=10^5),每条指令可能是以下两种之一: "C l r d",表示把 A[l],A[l+1],-, ...
- github 授权登录教程与如何设计第三方授权登录的用户表
需求:在网站上想评论一篇文章,而评论文章是要用户注册与登录的,那么怎么免去这麻烦的步骤呢?答案是通过第三方授权登录.本文讲解的就是 github 授权登录的教程. 效果体验地址:http://biao ...
- 2018 Multi-University Training Contest 1(部分题解)
Maximum Multiple Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- pt工具校验主从数据一致性之dsns方式
mysql主从数据一致性校验,常用的方法是Percona-Toolkit的组件pt-table-checksum,这东西怎么用网上一大堆,就不啰嗦了.主要说一下通过dsns方式发现从库的一种方式. p ...
- 洛谷 P1059【明明的随机数】 题解
事实上,完全可以先将输入进来带有重复的元素们保存进一个数组并对该数组进行排序,再将该数组的各个元素逐个判断是否与前一元素相同(重复与否的判断),将不重复的元素转移至另一个数组,与此同时进行对不重复元素 ...
- QRowTable表格控件(四)-效率优化之-优化数据源
目录 一.开心一刻 二.问题分析 三.重写数据源 1.自己存储数据 2.重写data接口 四.比较 五.相关文章 原文链接:QRowTable表格控件(四)-效率优化之-优化数据源 一.开心一刻 一程 ...
- 洛谷 P1101单词方阵
我已经,是这个世界上,最幸福的女孩了 ——<末日时 ...
- [币严区块链]数字货币交易所之瑞波(XRP)钱包对接
对接Ripple(XRP),不需要本地部署钱包,直接访问Ripple API,本文包括访问Ripple API及如何免费获取测试的XRP. 对接流程 安装Ripple API Ripple API 接 ...
- android 实现 波纹效果+图片左右无限滑动缩放效果
项目中用到的 ,记录下.说不定下次又用到了.就提取出来了. 录制效果一般,将就看吧.代码地址如下 https://yunpan.cn/ckQaXMpYwdUnn (提取码:7ac7)
- 阿里第二轮面试:手写Java二叉树
阿里面试 现在很多公司在招聘开发岗位的时候,都会事先在招聘信息中注明面试者应当具备的知识技能,而且在面试的过程中,有部分对于技能掌握程度有严格要求的公司还会要求面试者手写代码,这个环节很考验面试者的基 ...