vue使用vant-ui实现上拉加载、下拉刷新和返回顶部
vue如今在移动端经常使用的ui库有vant-ui和mint-ui,上拉加载、下拉刷新和返回顶部也是移动端最基础最多见的功能。下面就用vant-ui来实如今三个功能。css
首先,你须要安装好了vant,作好了相关配置 ,若是没有,请参考vant的官方文档 https://youzan.github.io/vant/#/zh-CN/quickstart
这里使用的自动按需加载的方式 。作好这些以后,你须要引入组件 ,自动按需加载的只是css和js。
vue
import Vue from 'vue' //引入vue import { Icon, List, PullRefresh } from 'vant' //引入字体图标,列表, 下拉刷新 Vue.use(List); Vue.use(PullRefresh);
下面的组件的使用和官方文档中也是同样的git
<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; } } }) }, }
须要注意的点:github
- 请求成功后
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++ 是为了上拉加载作准备,首屏已经加载,继续上拉须要加载的是第二页的内容
返回顶部是最容易实现的了,请看:ui
<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.this
注意:是给滚动的父元素设置,也就是设置了
overflow:auto
的元素
若是不想让按钮在一开始的时候存在,而是在滚动了必定的距离的时候再出现,那设置 一个滚动条的监听就搞定啦,
spa
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
注意:按钮要设置固定定位,按钮最好设置边框,会好看。
写的有点乱,望大神指点,但愿能给予须要的人一点点的帮助,有不明白的欢迎留言,谢谢!