下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第微信小程序虛擬列表的實現(xiàn)示例viewwx:for="{{list}}"wx:for-index="pageNum"id="item{{pageNum}}"
viewwx:for="{{item}}"
textclass=""{{item.idx}}/text
/view
/view
onLoad:function(options){
this.index=0;
this.currentIndex=0;//當(dāng)前頁數(shù)pageNum
this.pageHeight=[];//每屏高度存儲
this.allList=[];//獲取到的所有數(shù)據(jù)
this.systemHeight=0;//屏幕高度
constarr=[
idx:this.index++
idx:this.index++
idx:this.index++
idx:this.index++
idx:this.index++
this.setData({[`list[${this.currentIndex}>:arr},()={
this.setPageHeight();
this.getSystemInfo();
給每一屏的view動態(tài)的設(shè)置id名字,方便在渲染時獲取每屏高度,并進行存儲,為后續(xù)不在可視區(qū)域占位設(shè)置高度使用
循環(huán)pageHeight,相加每個分頁高度和當(dāng)前滾動距離進行比較,獲取到當(dāng)前渲染的pageNum,然后把當(dāng)前選渲染的pageNum-+1,上一屏幕和下一屏幕放入數(shù)組中,當(dāng)前三個分頁數(shù)據(jù)展示,其他屏幕的數(shù)據(jù)進行view占位,高度為存儲高度。
//滾動距離計算
onPageScroll:throttle(function(e){
letpageScrollTop=e[0].scrollTop;
letthat=this;
//滾動計算現(xiàn)在處于那一個分頁的屏
letscrollTop=0;
letcurrentIndex=this.currentIndex;
for(vari=0;ithis.pageHeight.length;i++){
scrollTop=scrollTop+this.pageHeight[i];
if(scrollToppageScrollTop+this.systemHeight-50){
this.currentIndex=i;
this.visualIndex=[i-1,i,i+1];
that.setData({
visualIndex:this.visualIndex
break;
},200)
實時監(jiān)控滾動,做節(jié)流優(yōu)化處理
constthrottle=(fn,interval)={
varenterTime=0;//觸發(fā)的時間
vargapTime=interval||300;//間隔時間,如果interval不傳值,默認為300ms
returnfunction(){
varthat=this;
varbackTime=newDate();//第一次函數(shù)return即觸發(fā)的時間
if(backTime-enterTimegapTime){
fn.call(that,arguments);
enterTime=backTime;//賦值給第一次觸發(fā)的時間保存第二次觸發(fā)時間
獲取到可視區(qū)域數(shù)組,然后判斷當(dāng)前pageNum是否在visualIndex里,是的話進行渲染,不是的話,view占位,高度獲取存儲高度
wxsmodule='filter'
varincludesList=function(list,currentIndex){
if(list){
returnlist.indexOf(currentIndex)-1
module.exports.includesList=includesList;
/wxs
view
viewwx:for="{{list}}"wx:for-index="pageNum"id="item{{pageNum}}"wx:key="pageNum"
blockwx:if="{{filter.includesList(visualIndex,pageNum)}}"
viewwx:for="{{item}}"
textclass=""{{item.idx}}/text
/view
/block
blockwx:else
view/view
/block
/view
/view
在可視區(qū)域的數(shù)組的pageNum則循環(huán)當(dāng)前數(shù)組,如果不在的話就設(shè)置高度占位,渲染效果如下:
這種方法就大功告成了!
方法二
使用微信小程序api
IntersectionObserver
//視圖監(jiān)聽
observePage:function(pageNum){
constthat=this;
constobserverView=wx.createIntersectionObserver(this).relativeToViewport({top:0,bottom:0});
observerView.observe(`#item${pageNum}`,(res)={
console.log(res,'res');
if(ersectionRatio0){
that.setData({
visualIndex:[pageNum-1,pageNum,pageNum+1]
利用oberserve監(jiān)聽當(dāng)前頁面是否在在可視區(qū)域內(nèi),是的話將當(dāng)前pageNum-+1,pageNum放入可視區(qū)域數(shù)組visualIn
溫馨提示
- 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 統(tǒng)編版2025-2026學(xué)年語文四年級第一學(xué)期期末質(zhì)量檢測練習(xí)卷(含答案)
- 湖南省岳陽市汨羅市2025-2026學(xué)年八年級上學(xué)期1月期末生物試題(無答案)
- 河南省駐馬店市泌陽縣2025-2026學(xué)年八年級上學(xué)期1月期末考試歷史試卷答案
- 2025-2026學(xué)年一年級(上)期末游戲化測試語文試卷(附參考答案)
- 五年級題目及答案
- 文件筐測試題及答案
- 2026年小學(xué)語文模擬沖刺押題卷
- 誠實做事的演講稿
- 冀教版三年級上冊數(shù)學(xué)第二單元-兩、三位數(shù)乘一位數(shù)-測試卷及答案(奪冠系列)
- 高中高二下學(xué)期地理期末考試試題答案解析
- 2026廣東廣州市海珠區(qū)住房和建設(shè)局招聘雇員7人筆試參考題庫及答案解析
- 云南師大附中2026屆高三1月高考適應(yīng)性月考卷英語(六)含答案
- 海南2025年中國熱帶農(nóng)業(yè)科學(xué)院橡膠研究所第一批招聘16人(第1號)筆試歷年參考題庫附帶答案詳解
- 2025-2026人教版數(shù)學(xué)七年級上冊期末模擬試卷(含答案)
- 2026年九江市八里湖新區(qū)國有企業(yè)面向社會公開招聘工作人員【48人】筆試參考題庫及答案解析
- 廣告行業(yè)法律法規(guī)與行業(yè)規(guī)范(標(biāo)準(zhǔn)版)
- 2025年CFA二級道德與專業(yè)標(biāo)準(zhǔn)題
- 2026年鄭州電力高等??茖W(xué)校單招職業(yè)技能測試題庫新版
- 2026年八年級物理上冊期末考試試卷及答案(共四套)
- 節(jié)能與新能源汽車技術(shù)路線圖2.0
- 保育員配合教學(xué)培訓(xùn)工作指南
評論
0/150
提交評論