中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

微信小程序圖片懶加載如何實現

發布時間:2022-03-11 10:17:58 來源:億速云 閱讀:1364 作者:iii 欄目:開發技術

這篇文章主要介紹“微信小程序圖片懶加載如何實現”,在日常操作中,相信很多人在微信小程序圖片懶加載如何實現問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”微信小程序圖片懶加載如何實現”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

定義

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

實現原理

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

判斷邏輯代碼如下

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

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

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

WXML節點信息

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

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

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

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

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() 停止監聽,回調函數不會再觸發

我們主要使用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來實現不要太酸爽。

到此,關于“微信小程序圖片懶加載如何實現”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

巴塘县| 茶陵县| 北川| 东安县| 科技| 东光县| 高雄县| 上林县| 沙坪坝区| 浦江县| 合作市| 拉萨市| 肥城市| 陇川县| 阿荣旗| 宜都市| 水富县| 汽车| 乳山市| 凤冈县| 盈江县| 横山县| 彭水| 洛川县| 拉萨市| 正安县| 防城港市| 志丹县| 枝江市| 茌平县| 遵化市| 普兰店市| 高邑县| 两当县| 田阳县| 东海县| 抚顺市| 武威市| 五大连池市| 大姚县| 西城区|