在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美

當前位置:雨林木風下載站 > 應用軟件教程 > 詳細頁面

什么是懶加載?小程序中圖片懶加載的2種完成方法

什么是懶加載?小程序中圖片懶加載的2種完成方法

更新時間:2025-09-20 文章作者:未知 信息來源:網絡 閱讀次數:

微信小程序,簡稱小程序,英文名Mini Program,是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或搜一下即可打開應用。小程序是一種不用下載就能使用的應用,也是一...
微信小程序,簡稱小程序,英文名Mini Program,是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或搜一下即可打開應用。小程序是一種不用下載就能使用的應用,也是一項門檻非常高的創新,經過將近兩年的發展,已經構造了新的小程序開發環境和開發者生態。
本篇文章給大家帶來的內容是關于什么是懶加載?小程序中圖片懶加載的兩種實現方法 ,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

定義

懶加載,前端人都知道的一種性能優化方式,簡單的來說,只有當圖片出現在瀏覽器的可視區域內時,才設置圖片正真的路徑,讓圖片顯示出來。這就是圖片懶加載。

實現原理

監聽頁面的scroll事件,判讀元素距離頁面的top值是否是小于等于頁面的可視高度

判斷邏輯代碼如下

element.getBoundingClientRect().top <= document.documentElement.clientHeight ? 顯示 : 默認

我們知道小程序頁面的腳本邏輯是在JsCore中運行,JsCore是一個沒有窗口對象的環境,所以不能在腳本中使用window,也無法在腳本中操作組件。

所以關于圖片懶加載就需要在數據上面做文章了。

頁面

頁面上面只需要根據數據的某一個字段來判斷是否顯示圖片就可以了,字段為Boolean類型,當為false的時候顯示默認圖片就行了。

代碼大概長成這樣

<view wx:for="{{list}}" class='item item-{{index}}'
 wx:key="{{index}}">
    <image class="{{item.show ? 'active': ''}}" src="{{item.show ? item.src : item.def}}"></image>
</view>

布局跟簡單,view組件里面有個圖片,并循環list,有多少就展示多少

image組件的src字段通過每一項的show來進行綁定,active是加了個透明的過渡

樣式

image{
    transition: all .3s ease;
    opacity: 0;
}
.active{
    opacity: 1;
}

邏輯

本位主要講解懶加載,所以把數據寫死在頁面上了

數據結構如下:

428961300-5b94c62aa3c9e_articlex.jpg

我們使用兩種方式來實現懶加載,準備好沒有,一起來快樂的擼碼吧。

WXML節點信息

小程序支持調用createSelectQuery創建一個SelectorQuery實例,并使用select方法來選擇節點,并通過boundingClientRect來獲取節點信息。

wx.createSelectorQuery().select('.item').boundingClientRect((ret)=>{
    console.log(ret)
}).exec()

顯示結果如下

2959195174-5b94c62a9e79c_articlex.jpg悄悄告訴你,小程序里面有個onPageScroll函數,是用來監聽頁面的滾動的。
還有個getSystemInfo函數,可以獲取獲取系統信息,里面包含屏幕的高度。

接下來,思路就透徹了吧。還是上面的邏輯, 扒拉扒拉直接寫代碼就行了,這里只寫下主要的邏輯

showImg(){
    let group = this.data.group
    let height = this.data.height  // 頁面的可視高度
    
    wx.createSelectorQuery().selectAll('.item').boundingClientRect((ret) => {
     ret.forEach((item, index) => {
       if (item.top <= height) { 判斷是否在顯示范圍內
         group[index].show = true // 根據下標改變狀態
       }
     })
     this.setData({
       group
     })
    }).exec()

}
onPageScroll(){ // 滾動事件
    this.showImg()
}

至此,我們完成了一個小程序版的圖片懶加載,只是思維轉變了下,其實并沒有改變實現方式。我們來學些新的東西吧。

節點布局相交狀態

節點相交狀態是啥?它是一個新的API,叫做IntersectionObserver, 本文只講解簡單的使用,了解更多請猛戳沒錯,就是點我

小程序里面給它的定義是節點布局交叉狀態API可用于監聽兩個或多個組件節點在布局位置上的相交狀態。這一組API常常可以用于推斷某些節點是否可以被用戶看見、有多大比例可以被用戶看見。

里面設計的概念主要有五個,分別為

參照節點:以某參照節點的布局區域作為參照區域,參照節點可以有多個,多個話參照區域取它們的布局區域的交集

目標節點:監聽的目標,只能是一個節點

相交區域:目標節點與參照節點的相交區域

相交比例:目標節點與參照節點的相交比例

閾值:可以有多個,默認為[0], 可以理解為交叉比例,例如[0.2, 0.5]

關于它的API有五個,依次如下

1、createIntersectionObserver([this], [options]),見名知意,創建一個IntersectionObserver實例

2、intersectionObserver.relativeTo(selector, [margins]), 指定節點作為參照區域,margins參數可以放大縮小參照區域,可以包含top、left、bottom、right四項

3、intersectionObserver.relativeToViewport([margin]),指定頁面顯示區域為參照區域

4、intersectionObserver.observer(targetSelector, callback),參數為指定監聽的節點和一個回調函數,目標元素的相交狀態發生變化時就會觸發此函數,callback函數包含一個result,下面再講

5、intersectionObserver.disconnect() 停止監聽,回調函數不會再觸發

然后說下callback函數中的result,它包含的字段為

字段名類型說明
intersectionRatioNumber相交比例
intersectionRectObject相交區域的邊界,包含 left 、 right 、 top 、 bottom 四項
boundingClientRectObject目標節點布局區域的邊界,包含 left 、 right 、 top 、 bottom 四項
relativeRectObject參照區域的邊界,包含 left 、 right 、 top 、 bottom 四項
timeNumber相交檢測時的時間戳

我們主要使用intersectionRatio進行判斷,當它大于0時說明是相交的也就是可見的。

先來波測試題,請說出下面的函數做了什么,并且log函數會執行幾次

1、
wx.createIntersectionObserver().relativeToViewport().observer('.box', (result) => {
     console.log('監聽box組件觸發的函數')   
 })
 
2、
wx.createIntersectionObserver().relativeTo('.box').observer('.item', (result) => {
     console.log('監聽item組件觸發的函數') 
})

3、
wx.createIntersectionObserver().relativeToViewport().observer('.box', (result) => {
    if(result.intersectionRatio > 0){
        console.log('.box組件是可見的') 
    }
})

duang,揭曉答案。

第一個以當前頁面的視窗監聽了.box組件,log會觸發兩次,一次是進入頁面一次是離開頁面

第二個以.box節點的布局區域監聽了.item組件,log會觸發兩次,一次是進入頁面一次是離開頁面

第三個以當前頁面的視窗監聽了.box組件,log只會在節點可見的時候觸發

好了,題也做了,API你也掌握了,相信你已經可以使用IntersectionObserver來實現圖片懶加載了吧,主要邏輯如下

let group = this.data.group // 獲取圖片數組數據
for (let i in this.data.group){   wx.createIntersectionObserver().relativeToViewport().observe('.item-'+ i, (ret) => {
       if (ret.intersectionRatio > 0){
         group[i].show = true 
       }
       this.setData({
         group
       })
     })
}

最后

至此,我們使用兩種方式實現了小程序版本的圖片懶加載,可以發現,使用IntersectionObserver來實現不要太酸爽。

相關推薦:

Javascript實現圖片懶加載插件的方法

用Js實現懶加載和跨域的實現步驟

以上就是什么是懶加載?小程序中圖片懶加載的兩種實現方法的詳細內容,更多請關注php中文網其它相關文章!


小程序是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或者搜一下即可打開應用。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美
  • <li id="86scu"><menu id="86scu"></menu></li>
    <li id="86scu"></li>
    <button id="86scu"></button>
  • <s id="86scu"></s><button id="86scu"><menu id="86scu"></menu></button>
  • 熟女少妇精品一区二区| 草草久久久无码国产专区| 国产午夜福利在线播放| 久久人妻无码一区二区| 在线一区二区不卡| 在线观看免费黄网站| av五月天在线| 一区二区三区 日韩| 久久精品视频91| 最近免费中文字幕中文高清百度| 欧美精品久久久久久久免费| 男人添女人荫蒂免费视频| 草草草视频在线观看| 欧美狂野激情性xxxx在线观| 精品国产一区二区三区无码| www.国产在线视频| 久久久久久久久久久视频| 国产特级淫片高清视频| www.四虎成人| 黄色小视频免费网站| 裸体大乳女做爰69| 成人免费观看cn| 免费大片在线观看| www.午夜av| 国产精品视频一二三四区| 中文精品无码中文字幕无码专区| 国产91沈先生在线播放| 久草资源站在线观看| 成年人小视频网站| 日本一二三区视频在线| 成年人午夜视频在线观看 | av动漫免费观看| 青青草综合视频| 久久久久久久少妇| 色乱码一区二区三区熟女| 日本精品久久久久久久久久| 漂亮人妻被中出中文字幕| 在线观看日本www| 欧美 国产 日本| www亚洲国产| 久久人妻精品白浆国产 | 男人的天堂日韩| 成人免费看片视频在线观看| 日韩欧美一区三区| 日本中文字幕在线不卡| 国产主播在线看| 日本xxxxx18| 五月婷婷六月丁香激情| 人妻av无码专区| 奇米视频7777| 人妻无码视频一区二区三区| 黄网站色视频免费观看 | 日韩av中文字幕第一页| 日韩欧美国产片| 妺妺窝人体色www在线小说| 法国空姐在线观看免费| 天天爱天天操天天干| 久久亚洲精品无码va白人极品| 久热免费在线观看| 欧美 日韩 国产在线观看| 久久视频免费在线| 在线播放 亚洲| 欧美性受xxxx黒人xyx性爽| 日日摸天天爽天天爽视频| 欧美激情 国产精品| 欧美亚洲黄色片| 天天想你在线观看完整版电影免费| 五月婷婷激情久久| 国产亚洲天堂网| 黄在线观看网站| 中文字幕乱码人妻综合二区三区| www.国产在线播放| 大陆av在线播放| 男人日女人逼逼| 日韩欧美国产免费| 国产综合免费视频| 国产视频在线视频| 亚洲激情在线看| 两性午夜免费视频| 黄色成人在线免费观看| aa视频在线播放| 色婷婷综合久久久久中文字幕| 国产v亚洲v天堂无码久久久| 久草青青在线观看| 亚洲第一狼人区| 青娱乐精品在线| 欧美一区二区激情| 青青青在线播放| 天天色天天干天天色| 久久人妻无码一区二区| 91猫先生在线| 亚洲一区二区在线视频观看| 裸体大乳女做爰69| 黄色动漫在线免费看| 亚洲免费黄色网| av网站手机在线观看| 无码人妻h动漫| 人人妻人人澡人人爽精品欧美一区| 久久观看最新视频| 国产中文字幕免费观看| 在线观看免费不卡av| 成年在线观看视频| 免费看黄色一级大片| 成年人深夜视频| 五月婷婷狠狠操| 国产日韩亚洲欧美在线| 污网站免费在线| 99热久久这里只有精品| 久国产精品视频| 四虎永久在线精品无码视频| 日本一二三四区视频| 日日摸天天爽天天爽视频| 日韩黄色片在线| 日本高清免费观看| 成人3d动漫一区二区三区| 国产激情片在线观看| 五月婷婷丁香综合网| 国产va亚洲va在线va| 亚洲免费av网| 男女无套免费视频网站动漫| 男女啪啪免费视频网站| 久久久99精品视频| 一级网站在线观看| 国产精品区在线| 人妻内射一区二区在线视频| www.亚洲视频.com| 国产资源第一页| 久久久久久久免费视频| 无套内谢丰满少妇中文字幕| 最新免费av网址| 波多野结衣xxxx| 午夜激情在线观看视频| 精品视频一区二区在线| 免费裸体美女网站| 熟妇人妻va精品中文字幕 | 男人女人黄一级| 久草综合在线观看| 成人在线观看黄| 国产精品99久久免费黑人人妻| 国产69精品久久久久久久| 真人做人试看60分钟免费| 国产精品夜夜夜爽张柏芝| 亚洲黄色片免费看| 9l视频自拍9l视频自拍| 9l视频自拍9l视频自拍| 热久久最新地址| 男人插女人视频在线观看| 99在线免费视频观看| 男人操女人逼免费视频| 任你操这里只有精品| 911福利视频| 中文字幕黄色大片| 日韩av加勒比| 蜜臀精品一区二区| 97xxxxx| 日本激情视频在线| 亚洲热在线视频| xxxx18hd亚洲hd捆绑| 青青青国产在线视频| 91性高潮久久久久久久| cao在线观看| a在线观看免费视频| 日韩成人午夜影院| 玩弄japan白嫩少妇hd| 日韩av影视大全| 精品人妻一区二区三区四区在线| 91视频免费版污| 9191国产视频| 久久久久久香蕉| 免费超爽大片黄| www午夜视频| 日韩视频在线视频| 欧美在线aaa| 狠狠97人人婷婷五月| 亚洲五月激情网| 久久综合久久色| 久久av综合网| 国产日本欧美在线| 免费看黄色一级大片| 国产精品www在线观看| 香蕉视频色在线观看| 日日碰狠狠躁久久躁婷婷| 黄色a级片免费看| 91性高潮久久久久久久| 性生交免费视频| 欧美成人xxxxx| 欧美 日韩 亚洲 一区| 日本道在线视频| 国产女同无遮挡互慰高潮91| 欧洲熟妇精品视频| 久草资源站在线观看| 被灌满精子的波多野结衣| 日本美女爱爱视频| 中文字幕剧情在线观看| 超碰超碰在线观看| 国产免费视频传媒| 日韩av播放器| 精品www久久久久奶水| 久久免费视频3| www黄色av|