版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】小程序怎么實現(xiàn)下拉刷新
這篇文章主要介紹了小程序怎么實現(xiàn)下拉刷新,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓在下帶著大家一起了解一下。enablePullDownRefreshenablePullDownRefresh是最容易實現(xiàn)下拉刷新的方法,在json文件中將enablePullDownRefresh設(shè)置為true,在Page中監(jiān)聽onPullDownRefresh事件即可,支持點擊頂部標題欄回到頂部,自定義標題欄時會失效,還可以通過直接調(diào)用wx.startPullDownRefresh()觸發(fā)下拉刷新事件,產(chǎn)生下拉刷新動畫,處理完下拉刷新中的數(shù)據(jù)更新后調(diào)用wx.stopPullDownRefresh()結(jié)束動畫即可。這種形式的下拉刷新的優(yōu)點很明顯就是簡單,沒有限制,但是缺點也同樣明顯:下拉動畫太過簡單,交互不夠優(yōu)雅且不能自定義下拉動畫當自定義標題欄時,fixed定位,在Android下標題欄也會被一起下拉scroll-viewscroll-view是官方的一個滾動視圖組件,使用很簡單,想要設(shè)置上拉刷新代碼如下:<scroll-view
class="scroll"
scroll-y
bindscrolltoupper="refresh">
<view
class="content">content</view>
</scroll-view>想要利用scroll-view實現(xiàn)上拉刷新,需要注意:一定要給scroll-view設(shè)置固定高度,否則監(jiān)聽事件不會觸發(fā)設(shè)置縱向滾動scroll-yscroll-view內(nèi)的內(nèi)容高度一定要比scroll-view高度要高,否則無法產(chǎn)生縱向滾動,就無法觸發(fā)監(jiān)聽事件scroll-view缺點:由于iOS有橡皮筋效果,因此最終效果會與Android有一定的差異剛打開頁面時上拉是無法觸發(fā)上拉監(jiān)聽事件,需要先向下滾動,觸發(fā)滾動,然后再上拉滾動才能觸發(fā)監(jiān)聽事件當有自定義頭部時,scroll-view需要一個高度計算,減去頭部高度scroll-view優(yōu)點:可以自定義加載動畫代碼相對簡單相對enablePullDownRefresh,scroll-view對滾動列表控制更加方便:scroll-into-view:滾動到指定元素enable-back-to-top:iOS點擊頂部狀態(tài)欄、安卓雙擊標題欄時,滾動條返回頂部,只支持豎向,且當自定義標題欄后就會失效官方并不推薦使用scroll-view做下拉刷新,官方文檔上有這樣一個tip自定義下拉刷新自定義下拉刷新最主要希望解決的問題還是在Android使用enablePullDownRefresh時fixed定位的標題欄或?qū)Ш綑跁幌吕膯栴},同時兩端在下拉刷新時的動畫保持一致,其實實現(xiàn)起來并不難,接下來就看看具體實現(xiàn):wxml:<view
class="scroll"
bindtouchstart="touchStart"
bindtouchmove="touchMove"
bindtouchend="touchEnd">
<view
class="animation">
<view
class="loading"></view>
<text
class="tip">{{state
===
0
?
'下拉刷新'
:
state
===
1?
'松開刷新'
:
'刷新中'}}</text>
</view>
<view
style="transform:
translateY({{translateHeight}}rpx)">
<slot
name="content"></slot>
</view>
</view>這個文件定義組件的模版,有一個滾動view包裹,綁定了touch事件,里面包含下拉刷新時的動畫,和一個slot,slot用于插入滾動列表的內(nèi)容wxss:.animation
{
display:
flex;
justify-content:
center;
align-items:
center;
width:
100%;
height:
150rpx;
margin-bottom:
-150rpx;
background-color:
#fff;
}
.loading
{
width:
30rpx;
height:
30rpx;
border:6rpx
solid
#333333;
border-bottom:
#cccccc
6rpx
solid;
border-radius:
50%;
animation:load
1.1s
infinite
linear;
}
@keyframes
load{
from{
transform:
rotate(0deg);
}
to{
transform:
rotate(360deg);
}
}
.tip
{
margin-left:
10rpx;
color:
#666;
}樣式文件這沒什么特別的js:let
lastY
=
0
//
上一次滾動的位置
let
scale
=
750
/
wx.getSystemInfoSync().windowWidth
//
rpx轉(zhuǎn)化比例
Component({
options:
{
multipleSlots:
true
},
data:
{
scrollTop:
0,
translateHeight:
0,
//
平移距離
state:
-1
},
properties:
{
//
觸發(fā)下拉刷新的距離
upperDistance:
{
type:
Number,
value:
150
}
},
methods:
{
//
監(jiān)聽滾動,獲取scrollTop
onPageScroll
(e)
{
this.data.scrollTop
=
e.scrollTop
},
touchStart
(e)
{
lastY
=
e.touches[0].clientY
},
touchMove
(e)
{
let
clientY
=
e.touches[0].clientY
let
offset
=
clientY
-
lastY
if
(this.data.scrollTop
>
0
||
offset
<
0)
return
this.data.translateHeight
+=
offset
this.data.state
=
0
lastY
=
e.touches[0].clientY
if
(this.data.translateHeight
-
this.data.scrollTop
*
scale
>
this.data.upperDistance)
{
this.data.state
=
1
}
this.setData({
translateHeight:
this.data.translateHeight,
state:
this.data.state
})
},
touchEnd
(e)
{
if
(this.data.translateHeight
-
this.data.scrollTop
*
scale
>
this.data.upperDistance)
{
this.setData({
translateHeight:
150
})
this.triggerEvent('scrolltoupper')
this.setData({
state:
2
})
}
else
if
(this.data.scrollTop
<=
0)
{
this.stopRefresh()
}
},
//
停止刷新
stopRefresh
()
{
this.setData({
translateHeight:
0,
state:
-1
},
()
=>
{
wx.pageScrollTo({
scrollTop:
0,
duration:
0
})
})
}
}
})這個下拉刷新組件最重要的是控制下拉刷新的時機,代碼體現(xiàn)就是定義了一個upperDistance,下拉刷新的距離來判斷是否執(zhí)行刷新。手指滑動時,獲取滑動距離,translateHeight累加用于展示,在touchEnd事件中判斷滑動距離是否達到設(shè)定值,達到設(shè)定值就發(fā)送scrolltoupper事件,在父組件中監(jiān)聽即可,否則停止刷新。<header
title="下拉刷新"
background="#fff"></header>
<refresh-scroll
id="refreshScroll"
bindscrolltoupper="refresh">
<view
class="item"
slot="content"
wx:for="{{list}}">{{item}}</view>
</refresh-scroll>Page({
data:
{
list:
[]
},
onLoad:
function
()
{
this.refreshScroll
=
this.selectComponent('#refreshScroll')
for
(let
i
=
0;
i
<
10;
i++)
{
this.data.list.push(i)
}
this.setData({
list:
this.data.list
})
},
onPageScroll
(e)
{
this.refreshScroll.onPageScroll(e)
},
onReachBottom
()
{
wx.showLoading({
title:
'onReachBottom'
})
setTimeout(()
=>
{
wx.hideLoading()
},
1000)
},
refresh:
function
(e)
{
setTimeout(()
=>
{
this.refreshScroll
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 煤直接液化操作工安全宣貫競賽考核試卷含答案
- 海底管道保溫工標準化競賽考核試卷含答案
- ??诰羰课枧嘤?xùn)課件
- 景泰藍磨藍工崗前理論考核試卷含答案
- 化妝品制造工崗前理論知識考核試卷含答案
- 老年人入住手續(xù)辦理制度
- 浪琴手表培訓(xùn)課件
- 酒店財務(wù)會計制度
- 超市商品庫存預(yù)警制度
- 預(yù)拌混凝土生產(chǎn)線技術(shù)改造項目環(huán)境影響報告表
- 紀檢監(jiān)察業(yè)務(wù)培訓(xùn)
- 急慢性失血性貧血課件
- 人教版七年級上冊歷史期末模擬試卷及答案
- 2025年及未來5年中國肉干肉脯市場調(diào)查研究及行業(yè)投資潛力預(yù)測報告
- 有機合成化學(xué)王玉爐第三版省公開課一等獎全國示范課微課金獎?wù)n件
- 凝血的臨床課件
- 高密池除硬度原理課件
- 空放貸款合同(標準版)
- 請護理合同三方協(xié)議合同
- 包銷模式下郵輪旅客人身傷亡責(zé)任的多維審視與法律規(guī)制探究
- 《工程力學(xué)》課件(共十三章)
評論
0/150
提交評論