最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript圖片懶加載的優(yōu)化方法詳解

 更新時(shí)間:2022年03月28日 15:39:02   作者:故里有長安丶丶  
這篇文章主要為大家詳細(xì)介紹了JavaScript圖片懶加載的優(yōu)化方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

一、方法一

在這里插入圖片描述

重點(diǎn):

1.getBoundingClientRect().top > window.innerHeight 圖片未出現(xiàn)

2.getBoundingClientRect().top < window.innerHeight 圖片出現(xiàn)了

HTML:

<ul>
    ......
    <li>2222222222</li>
    <li>2222222222</li>
    <li>2222222222</li>
    <li>2222222222</li>
    <li>2222222222</li>
    <li>2222222222</li>
    /*先用data-自定義標(biāo)簽,使圖片先不加載*/
    <img data-src="./img1.jpg" height="200px"><br>
    <img data-src="./img2.jpg" height="200px" alt=""><br>
    <img data-src="./img3.jpg" height="200px" alt="">
</ul>

JavaScript:

let img = document.querySelectorAll('img')
window.addEventListener('scroll',() => {
	img.forEach((item) => {
		//若圖片頂部高度小于視窗高度
		if(item.getBoundingClientRect().top < window.innerHeight) {
			const data_src = item.getAttribute('data-src')
			//則將自定義屬性data-src賦值給src屬性
			item.setAttribute("src",data_src)
		} 
	})
	console.log("scroll觸發(fā)了");  //此方法:若加載很多內(nèi)容,就會(huì)導(dǎo)致任務(wù)的堆積,影響整體效率
})

請(qǐng)?zhí)砑訄D片描述

我們可以看到,雖然圖片懶加載已經(jīng)成功了,但是scroll事件仍在不斷觸發(fā),非常消耗資源,因此目前最推薦使用的方法還是IntersectionObserver

二、方法二 InterSectionObserver

重點(diǎn):

1.observer.observe(DOM節(jié)點(diǎn)) 觀察哪個(gè)DOM節(jié)點(diǎn)

2.observer.unobserve(DOM節(jié)點(diǎn)) 取消觀察某DOM節(jié)點(diǎn)

3.callback目標(biāo)能看見觸發(fā)一次;目標(biāo)元素看不見了又觸發(fā)一次

HTML如上

JavaScript:

let img = document.querySelectorAll('img')
//此回調(diào):目標(biāo)能看見觸發(fā)一次;目標(biāo)元素看不見了又觸發(fā)一次
const callback = (entries) => {   //接收一個(gè)數(shù)組作為參數(shù),數(shù)組每一項(xiàng)都和目標(biāo)元素相關(guān),比如		isIntersecting判斷目標(biāo)元素是否被觀察到了,又比如target屬性代表該目標(biāo)元素
    entries.forEach((item) => {
        //若該目標(biāo)元素被觀察到了
        if(item.isIntersecting) {
            const img = item.target //目標(biāo)元素
            const data_src = img.getAttribute('data-src')
            img.setAttribute('src',data_src)
            observer.unobserve(img)  //observer.unobserve(DOM節(jié)點(diǎn))  取消觀察某DOM節(jié)點(diǎn)
        }
        console.log('觸發(fā)');
    })
}
const observer = new IntersectionObserver(callback)
//遍歷所有img,使得所有img被觀察
img.forEach((item) => {
    observer.observe(item)  //observer.observe(DOM節(jié)點(diǎn))  觀察哪個(gè)DOM節(jié)點(diǎn)
})

思路:

new一個(gè)觀察實(shí)例,并通過觀察實(shí)例身上的observe屬性觀察每一個(gè)圖片。定義callback回調(diào)函數(shù),設(shè)置 目標(biāo)圖片出現(xiàn)時(shí)改變屬性

請(qǐng)?zhí)砑訄D片描述

此時(shí)我們看到,當(dāng)所有圖片都懶加載完之后(observe取消觀察DOM節(jié)點(diǎn)),scroll事件就不再觸發(fā)*

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!   。

相關(guān)文章

  • 從零使用TypeScript開發(fā)項(xiàng)目打包發(fā)布到npm

    從零使用TypeScript開發(fā)項(xiàng)目打包發(fā)布到npm

    這篇文章主要介紹了從零使用TypeScript開發(fā)項(xiàng)目打包發(fā)布到npm,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • js實(shí)現(xiàn)連連看游戲

    js實(shí)現(xiàn)連連看游戲

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)連連看游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • javascript鼠標(biāo)跟隨運(yùn)動(dòng)3種效果(眼球效果,蘋果菜單,方向跟隨)

    javascript鼠標(biāo)跟隨運(yùn)動(dòng)3種效果(眼球效果,蘋果菜單,方向跟隨)

    在很多網(wǎng)站上能看到圖片跟隨鼠標(biāo)移動(dòng)的JS特效,其實(shí)做法很簡單,本文就介紹了很多javascript鼠標(biāo)跟隨運(yùn)動(dòng),在這里與大家分享下。
    2016-10-10
  • 詳細(xì)談?wù)凟S6中的symbol數(shù)據(jù)類型

    詳細(xì)談?wù)凟S6中的symbol數(shù)據(jù)類型

    這篇文章主要給大家介紹了關(guān)于ES6中symbol數(shù)據(jù)類型的相關(guān)資料,Symbol函數(shù)的特性是每一個(gè)Symbol函數(shù)的返回值都是唯一的,可以通過給symbol函數(shù)傳遞不同的參數(shù)產(chǎn)生具有不同標(biāo)記的值,需要的朋友可以參考下
    2021-08-08
  • IE下JS保存圖片的簡單實(shí)例

    IE下JS保存圖片的簡單實(shí)例

    下面小編就為大家?guī)硪黄狪E下JS保存圖片的簡單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-07-07
  • JavaScript如何借用構(gòu)造函數(shù)繼承

    JavaScript如何借用構(gòu)造函數(shù)繼承

    這篇文章主要介紹了JavaScript如何借用構(gòu)造函數(shù)繼承,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • javascript實(shí)現(xiàn)回到頂部特效

    javascript實(shí)現(xiàn)回到頂部特效

    當(dāng)頁面特別長的時(shí)候,用戶想回到頁面頂部,必須得滾動(dòng)好幾次滾動(dòng)鍵才能回到頂部,如果在頁面右下角有個(gè)“返回頂部”的按鈕,用戶點(diǎn)擊一下,就可以回到頂部,對(duì)于用戶來說,是一個(gè)比較好的體驗(yàn)。
    2015-05-05
  • javascript特效實(shí)現(xiàn)——當(dāng)前時(shí)間和倒計(jì)時(shí)效果的簡單實(shí)例

    javascript特效實(shí)現(xiàn)——當(dāng)前時(shí)間和倒計(jì)時(shí)效果的簡單實(shí)例

    下面小編就為大家?guī)硪黄猨avascript特效實(shí)現(xiàn)——當(dāng)前時(shí)間和倒計(jì)時(shí)效果的簡單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-07-07
  • webpack4之如何編寫loader的方法步驟

    webpack4之如何編寫loader的方法步驟

    這篇文章主要介紹了webpack4之如何編寫loader,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-06-06
  • JS中常用的消息框總結(jié)

    JS中常用的消息框總結(jié)

    小編給大家總結(jié)了JS最常用到的幾種消息提示框,大家應(yīng)該經(jīng)常用的到,一起學(xué)習(xí)下吧。
    2018-02-02

最新評(píng)論

桂平市| 昭平县| 得荣县| 东乡族自治县| 长顺县| 沂源县| 原平市| 温泉县| 诸城市| 久治县| 徐闻县| 南京市| 鸡泽县| 南郑县| 旌德县| 稷山县| 丹东市| 嵩明县| 克山县| 理塘县| 武山县| 东平县| 固原市| 霍山县| 竹山县| 遂平县| 丰城市| 和静县| 苏尼特右旗| 海阳市| 壶关县| 泾阳县| 河源市| 南澳县| 荥经县| 南丹县| 乐清市| 高唐县| 鹤庆县| 上杭县| 河西区|