欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何通過IntersectionObserver實(shí)現(xiàn)懶加載

 更新時(shí)間:2023年04月17日 10:20:42   作者:凌晨?||?AmsWait  
這篇文章主要介紹了通過IntersectionObserver實(shí)現(xiàn)懶加載,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

通常懶加載等都會(huì)通過監(jiān)聽scroll事件用getBoundingClientRect()來判斷元素位置來決定是否可以開始加載。性能開銷是比較大的,為了節(jié)省性能又需要各種操作去彌補(bǔ),例如用節(jié)流來減少判斷次數(shù)等。
IntersectionObserver API可以完全省去這些操作,只需要簡(jiǎn)單的讀取即可。

點(diǎn)擊查看IntersectionObserver 文檔

示例

new IntersectionObserver(callBack, options);

    let options = {
        root: null, // 相對(duì)的根元素,null為視口
        threshold: 1.0 //重疊率 0.0-1.0(完全重疊即完全進(jìn)入root元素) 重疊率達(dá)到要求后觸發(fā)事件 
    },
    callBack = (entries, observer) => { // entries 數(shù)組,包含所有的被觀察者

        entries.forEach(entry => {
            // isIntersecting 即是否重疊
            entry.target.innerText = entry.isIntersecting ? '加載~~~~': '不可見'; 
        })
    },
    observer  = new IntersectionObserver(callBack, options);

    let observedList = document.querySelectorAll('h1');
    observedList.forEach(element => {
        observer.observe(element)
    });

options 配置項(xiàng)

傳遞到 IntersectionObserver() 構(gòu)造函數(shù)的 options 對(duì)象,允許您控制觀察者的回調(diào)函數(shù)的被調(diào)用時(shí)的環(huán)境。它有以下字段:

  • root

指定根(root)元素,用于檢查目標(biāo)的可見性。必須是目標(biāo)元素的父級(jí)元素。如果未指定或者為null,則默認(rèn)為瀏覽器視窗。

  • rootMargin

根(root)元素的外邊距。類似于 CSS 中的 margin 屬性,比如 “10px 20px 30px 40px” (top, right, bottom, left)。如果有指定 root 參數(shù),則 rootMargin 也可以使用百分比來取值。該屬性值是用作 root 元素和 target 發(fā)生交集時(shí)候的計(jì)算交集的區(qū)域范圍,使用該屬性可以控制 root 元素每一邊的收縮或者擴(kuò)張。默認(rèn)值為0。

  • threshold

可以是單一的 number 也可以是 number 數(shù)組,target 元素和 root 元素相交程度達(dá)到該值的時(shí)候 IntersectionObserver 注冊(cè)的回調(diào)函數(shù)將會(huì)被執(zhí)行。如果你只是想要探測(cè)當(dāng) target 元素的在 root 元素中的可見性超過50%的時(shí)候,你可以指定該屬性值為0.5。如果你想要 target 元素在 root 元素的可見程度每多25%就執(zhí)行一次回調(diào),那么你可以指定一個(gè)數(shù)組 [0, 0.25, 0.5, 0.75, 1]。默認(rèn)值是0 (意味著只要有一個(gè) target 像素出現(xiàn)在 root 元素中,回調(diào)函數(shù)將會(huì)被執(zhí)行)。該值為1.0含義是當(dāng) target 完全出現(xiàn)在 root 元素中時(shí)候 回調(diào)才會(huì)被執(zhí)行。

Demo

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body {
            font-size: 24px;
        }
    </style>
</head>
<body>
    <h1>不可見</h1>
    <h4>不可見</h4>
    <h1>不可見</h1>
    <h4>不可見</h4>
    <h1>不可見</h1>
    <h4>不可見</h4>
    <h1>不可見</h1>
    <h4>不可見</h4>
    <h1>不可見</h1>
    <h4>不可見</h4>
    <h1>不可見</h1>
    <h4>不可見</h4>
    <h1>不可見</h1>
    <h4>不可見</h4>
    <h1>不可見</h1>
    <h4>不可見</h4>
    <h1>不可見</h1>
    <h4>不可見</h4>
    <h1>不可見</h1>
    <h4>不可見</h4>
    <h1>不可見</h1>
    <h4>不可見</h4>
    <h1>不可見</h1>
    <h4>不可見</h4>
    <h1>不可見</h1>
    <h4>不可見</h4>
    <h1>不可見</h1>
    <h4>不可見</h4>
    <h1>不可見</h1>
    <h4>不可見</h4>

    <script>
        let options = {
            root: null, // 根元素,null為視口
            threshold: 1.0 //重疊率 0.0-1.0  重疊率達(dá)到要求后觸發(fā)事件 
        },
        callBack = (entries, observer) => {
            entries.forEach(entry => {
                entry.target.innerText = entry.isIntersecting ? '測(cè)試': '不可見';
            })
        },
        observer  = new IntersectionObserver(callBack, options);

        let observedList = document.querySelectorAll('h1');
        observedList.forEach(element => {
            observer.observe(element)
        });
    </script>
</body>
</html>

到此這篇關(guān)于通過IntersectionObserver實(shí)現(xiàn)懶加載的文章就介紹到這了,更多相關(guān)IntersectionObserver懶加載內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • uni-app實(shí)現(xiàn)微信小程序長(zhǎng)按拍視頻功能

    uni-app實(shí)現(xiàn)微信小程序長(zhǎng)按拍視頻功能

    這篇文章主要為大家詳細(xì)介紹了uni-app實(shí)現(xiàn)微信小程序長(zhǎng)按拍視頻功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • JS實(shí)現(xiàn)仿google、百度搜索框輸入信息智能提示的實(shí)現(xiàn)方法

    JS實(shí)現(xiàn)仿google、百度搜索框輸入信息智能提示的實(shí)現(xiàn)方法

    這篇文章主要介紹了JS實(shí)現(xiàn)仿google、百度搜索框輸入信息智能提示的實(shí)現(xiàn)方法,實(shí)例分析了javascript實(shí)現(xiàn)智能提示功能的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • JS運(yùn)算符簡(jiǎn)單用法示例

    JS運(yùn)算符簡(jiǎn)單用法示例

    這篇文章主要介紹了JS運(yùn)算符簡(jiǎn)單用法,結(jié)合實(shí)例形式詳細(xì)分析了JavaScript各種邏輯運(yùn)算符、數(shù)學(xué)運(yùn)算符、關(guān)系運(yùn)算符等相關(guān)操作技巧,需要的朋友可以參考下
    2020-01-01
  • JS?getRandomValues和Math.random方法深入解析

    JS?getRandomValues和Math.random方法深入解析

    這篇文章主要為大家介紹了JS?getRandomValues和Math.random方法深入詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • TypeScript中的類型斷言[as語(yǔ)法|<>語(yǔ)法]的使用

    TypeScript中的類型斷言[as語(yǔ)法|<>語(yǔ)法]的使用

    本文主要介紹了TypeScript中的類型斷言[as語(yǔ)法|<>語(yǔ)法]的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • JS實(shí)現(xiàn)淡入淡出圖片效果的方法分析

    JS實(shí)現(xiàn)淡入淡出圖片效果的方法分析

    這篇文章主要介紹了JS實(shí)現(xiàn)淡入淡出圖片效果的方法,結(jié)合實(shí)例形式分析了js鼠標(biāo)響應(yīng)實(shí)現(xiàn)圖片淡入淡出效果的原理與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-12-12
  • JS根據(jù)生日算年齡的方法

    JS根據(jù)生日算年齡的方法

    這篇文章主要介紹了JS根據(jù)生日算年齡的方法,涉及javascript操作時(shí)間的相關(guān)技巧,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下
    2015-05-05
  • javascript閉包功能與用法實(shí)例分析

    javascript閉包功能與用法實(shí)例分析

    這篇文章主要介紹了javascript閉包功能與用法,結(jié)合具體實(shí)例形式深入淺出的分析了javascript中閉包的概念、功能、使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-04-04
  • js實(shí)現(xiàn)鼠標(biāo)移入圖片放大效果

    js實(shí)現(xiàn)鼠標(biāo)移入圖片放大效果

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)鼠標(biāo)移入圖片放大效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • 去除html代碼里面的script正則方法

    去除html代碼里面的script正則方法

    下面小編就為大家?guī)硪黄コ齢tml代碼里面的script正則方法。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-05-05

最新評(píng)論