列表上拉下拉加載數(shù)據(jù)是再常見(jiàn)不過(guò)的功能,第一個(gè)想到的是scroll-view組件,里面有兩個(gè)事件,分別是bindscrolltoupper(拉到最頂部)和bindscrolltolower(拉到最底部),用bindscrolltoupper實(shí)現(xiàn)上拉效果極差,稍微滑一下就觸發(fā),也就是說(shuō)一言不合就下拉刷新列表,體驗(yàn)很差,網(wǎng)上百度了很久說(shuō)是scroll-view不能和onPullDownRefresh聯(lián)用,不明覺(jué)厲,最后總結(jié)一下終結(jié)辦法
先來(lái)張效果圖

效果預(yù)覽
不用scroll-view組件
在需要的頁(yè)面打開(kāi)配置(不需要在全局配置,我用的是wepy,不需要在app.wpy寫(xiě))
-
config = {
-
navigationBarTitleText: '測(cè)試上拉下拉',
-
// 不要把true寫(xiě)成 'true'
-
enablePullDownRefresh: true,
-
// 不配成dark的話三個(gè)加載中的點(diǎn)會(huì)看不到,其實(shí)是出來(lái)了,只是三個(gè)點(diǎn)是白色的,如果你的頁(yè)面背景也是白的,那就看不出效果了
-
backgroundTextStyle: 'dark'
-
}
來(lái)個(gè)長(zhǎng)長(zhǎng)的列表
-
<template>
-
<view wx:for="{{[1, 2, 3, 4, 5, 6, 7, 8, 9]}}" wx:for-item="i">
-
<view wx:for="{{[1, 2, 3, 4, 5, 6, 7, 8, 9]}}" wx:for-item="j">
-
<view wx:if="{{i <= j}}">
-
{{i}} * {{j}} = {{i * j}}
-
</view>
-
</view>
-
</view>
-
</template>
關(guān)鍵事件
-
onPullDownRefresh() {
-
console.log('下拉刷新列表')
-
}
-
onReachBottom() {
-
console.log('上拉加載下一頁(yè)')
-
}
在微信開(kāi)發(fā)者工具跑起來(lái)沒(méi)什么問(wèn)題,在真機(jī)跑一下,三個(gè)點(diǎn)下來(lái)以后竟然不上去了,很尷尬,最后在參考文章第二篇的評(píng)論里一位網(wǎng)友的回答解決了這個(gè)問(wèn)題,手動(dòng)讓三個(gè)點(diǎn)彈回去,wx.stopPullDownRefresh(),小程序API里有,可以點(diǎn)這里自行看一下
-
onPullDownRefresh() {
-
console.log('下拉刷新列表')
-
// 5秒模擬數(shù)據(jù)加載
-
setTimeout(function () {
-
// 不加這個(gè)方法真機(jī)下拉會(huì)一直處于刷新?tīng)顟B(tài),無(wú)法復(fù)位
-
wepy.stopPullDownRefresh()
-
}, 5000)
-
}
-
onReachBottom() {
-
console.log('上拉加載下一頁(yè)')
-
}
完整代碼
-
<template>
-
<view wx:for="{{[1, 2, 3, 4, 5, 6, 7, 8, 9]}}" wx:for-item="i">
-
<view wx:for="{{[1, 2, 3, 4, 5, 6, 7, 8, 9]}}" wx:for-item="j">
-
<view wx:if="{{i <= j}}">
-
{{i}} * {{j}} = {{i * j}}
-
</view>
-
</view>
-
</view>
-
</template>
-
-
<script>
-
import wepy from 'wepy'
-
-
export default class Refresh extends wepy.page {
-
config = {
-
navigationBarTitleText: '測(cè)試上拉下拉',
-
enablePullDownRefresh: true,
-
backgroundTextStyle: 'dark'
-
}
-
components = {
-
}
-
data = {
-
}
-
-
computed = {
-
}
-
-
methods = {
-
}
-
-
events = {
-
-
}
-
onLoad() {
-
}
-
onPullDownRefresh() {
-
console.log('下拉刷新列表')
-
setTimeout(function () {
-
// 不加這個(gè)方法真機(jī)下拉會(huì)一直處于刷新?tīng)顟B(tài),無(wú)法復(fù)位
-
wepy.stopPullDownRefresh()
-
}, 5000)
-
}
-
onReachBottom() {
-
console.log('上拉加載下一頁(yè)')
-
wepy.showToast({
-
title: '上拉加載下一頁(yè)',
-
icon: 'none',
-
mask: true,
-
duration: 1000
-
})
-
}
-
}
-
</script>
-
-
<style lang="less">
-
</style>