对于vue.js移动端app的上拉加载和下拉刷新的实现,我们可以使用第三方插件better-scroll来实现。better-scroll是一款基于原生js的iscroll的重写版本,在实现上提供了更好的性能和更友好的api。
下面是vue.js移动端app之上拉加载以及下拉刷新的完整攻略:
安装better-scroll
在使用better-scroll之前,需要先安装它。在命令行中执行以下命令:
npm install better-scroll -S
下拉刷新
下拉刷新的实现可以分成以下几步:
1. 设计页面结构
假设我们有一个数据列表需要下拉刷新,那么首先需要在页面中设计好结构。一般情况下,下拉刷新的容器高度固定,而数据列表会根据内容自动撑高。
<template>
<div class="wrapper">
<div class="list">
// 数据列表,根据实际情况进行适当修改
</div>
<div class="pulldown">
<div class="loading" ref="pullup">下拉刷新</div>
</div>
</div>
</template>
<style>
.wrapper {
height: 100%;
overflow: hidden;
}
.list {
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 50px; // 下拉刷新容器的高度
overflow: auto;
}
.pulldown {
position: absolute;
left: 0;
bottom: 0;
right: 0;
height: 50px;
line-height: 50px;
text-align: center;
font-size: 14px;
color: #999;
}
.loading {
display: inline-block;
transition: all .2s;
transform: rotate(0deg);
margin-right: 10px;
}
.loading.rotate {
transform: rotate(180deg);
}
</style>
2. 初始化better-scroll
在vue的mounted生命周期中初始化better-scroll。在初始化时,需要配置下拉刷新的参数:
import BScroll from 'better-scroll'
export default {
data() {
return {
bscroll: null, // better-scroll实例
loaderText: '下拉可以刷新',
pullLoader: {
threshold: 80, // 在pullDownRefresh阈值范围内的距离为下拉阈值
stop: 40 // 最终停留的位置
}
}
},
mounted() {
this.initScroll()
},
methods: {
initScroll() {
const wrapper = this.$refs.wrapper
const pullup = this.$refs.pullup
const self = this
this.bscroll = new BScroll(wrapper, {
pullDownRefresh: {
threshold: this.pullLoader.threshold,
stop: this.pullLoader.stop
},
click: true
})
this.bscroll.on('pullingDown', function () {
// 刷新动作
self.refreshList()
setTimeout(() => {
// 刷新完成后重置better-scroll
self.bscroll.finishPullDown()
self.bscroll.refresh()
self.loaderText = '下拉可以刷新'
}, 1000)
})
this.bscroll.on('scroll', function (pos) {
// 根据下拉距离展示loading样式
if (pos.y > (self.pullLoader.threshold + self.pullLoader.stop)) {
self.loaderText = '松开立即刷新'
pullup.classList.add('rotate')
} else {
self.loaderText = '下拉可以刷新'
pullup.classList.remove('rotate')
}
})
}
}
}
3. 编写下拉刷新方法
// 在methods中定义refreshList方法用来下拉刷新
methods: {
refreshList() {
// 执行下拉刷新逻辑
console.log('refresh list')
}
}
上拉加载
上拉加载的实现和下拉刷新类似,也分为以下三步:
1. 设计页面结构
上拉加载的容器放在数据列表的下方,当达到一定的距离时,触发上拉加载事件。
<template>
<div class="wrapper">
<div class="list">
// 数据列表,根据实际情况进行适当修改
</div>
<div class="pullup" ref="pullup">
<div class="loading">loading...</div>
</div>
</div>
</template>
<style>
.wrapper {
height: 100%;
overflow: hidden;
}
.list {
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 50px; // 上拉加载容器的高度
overflow: auto;
}
.pullup {
position: absolute;
left: 0;
bottom: 0;
right: 0;
height: 50px;
line-height: 50px;
text-align: center;
font-size: 14px;
color: #999;
}
.loading {
display: inline-block;
transition: all .2s;
transform: rotate(0deg);
margin-right: 10px;
}
</style>
2. 初始化better-scroll
和下拉刷新一样,在vue的mounted生命周期中初始化better-scroll。在初始化时需要配置上拉加载的参数:
export default {
data() {
return {
bscroll: null, // better-scroll实例
loaderText: '正在加载...',
pushLoader: {
threshold: 110 // 在pushLoadMore阈值范围内的距离为下拉阈值
}
}
},
mounted() {
this.initScroll()
},
methods: {
initScroll() {
const wrapper = this.$refs.wrapper
const pullup = this.$refs.pullup
const self = this
this.bscroll = new BScroll(wrapper, {
pullDownRefresh: true, // 标记为上拉加载
click: true,
pullUpLoad: {
threshold: this.pushLoader.threshold
}
})
this.bscroll.on('pullingUp', function () {
// 加载更多
self.loadMore()
})
this.bscroll.on('scroll', function (pos) {
// 根据下拉距离展示loading样式
if (pos.y < (pos.maxScrollY - self.pushLoader.threshold)) {
self.loaderText = '释放加载更多...'
} else {
self.loaderText = '正在加载...'
}
})
}
}
}
3. 编写上拉加载方法
// 在methods中定义loadMore方法用来上拉加载
methods: {
loadMore() {
// 执行上拉加载逻辑
console.log('load more')
}
}
以上就是vue.js移动端app之上拉加载以及下拉刷新的实现。其中插件better-scroll提供了更好的性能和api,建议大家多加使用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue.js移动端app之上拉加载以及下拉刷新实战 - Python技术站