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

詳解JavaScript兩個(gè)實(shí)用的圖片懶加載優(yōu)化方法

 更新時(shí)間:2022年03月28日 08:38:21   作者:故里有長(zhǎng)安丶丶  
本文主要介紹了JavaScript兩個(gè)實(shí)用的圖片懶加載優(yōu)化方法,文中通過(guò)示例代碼介紹的非常詳細(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í)例,并通過(guò)觀察實(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ā)*

到此這篇關(guān)于詳解JavaScript兩個(gè)實(shí)用的圖片懶加載優(yōu)化方法的文章就介紹到這了,更多相關(guān)JavaScript 圖片懶加載優(yōu)化 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JavaScript利用多彩線條擺出心形效果的示例代碼

    JavaScript利用多彩線條擺出心形效果的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用JavaScript語(yǔ)言實(shí)現(xiàn)多彩線條擺出心形效果,文中的實(shí)現(xiàn)步驟講解詳細(xì),快跟隨小編一起動(dòng)手嘗試一下吧
    2022-07-07
  • 利用Echarts實(shí)現(xiàn)圖例顯示百分比效果

    利用Echarts實(shí)現(xiàn)圖例顯示百分比效果

    EChart開源來(lái)自百度商業(yè)前端數(shù)據(jù)可視化團(tuán)隊(duì),基于html5?Canvas,是一個(gè)純Javascript圖表庫(kù),提供直觀,生動(dòng),可交互,可個(gè)性化定制的數(shù)據(jù)可視化圖表。本文將利用EChart實(shí)現(xiàn)圖例中顯示百分比的效果,感興趣的可以學(xué)習(xí)一下
    2022-03-03
  • JavaScript前端開發(fā)時(shí)數(shù)值運(yùn)算的小技巧

    JavaScript前端開發(fā)時(shí)數(shù)值運(yùn)算的小技巧

    這篇文章主要介紹了JavaScript前端開發(fā)時(shí)數(shù)值運(yùn)算的小技巧,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • js string 轉(zhuǎn) int 注意的問題小結(jié)

    js string 轉(zhuǎn) int 注意的問題小結(jié)

    Javascript將string類型轉(zhuǎn)換int類型的過(guò)程中總會(huì)出現(xiàn)不如意的問題,下面為大家介紹下js string轉(zhuǎn)int的一些注意的問題,感興趣的朋友可以參考下
    2013-08-08
  • 使用html2Canvas打印高清PDF的原理解析

    使用html2Canvas打印高清PDF的原理解析

    這篇文章主要為大家詳細(xì)介紹了如何使用html2Canvas打印高清PDF的效果,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,需要的可以了解一下
    2023-07-07
  • 基于BootStrap Metronic開發(fā)框架經(jīng)驗(yàn)小結(jié)【七】數(shù)據(jù)的導(dǎo)入、導(dǎo)出及附件的查看處理

    基于BootStrap Metronic開發(fā)框架經(jīng)驗(yàn)小結(jié)【七】數(shù)據(jù)的導(dǎo)入、導(dǎo)出及附件的查看處理

    在很多系統(tǒng)模塊里面,我們可能都需要進(jìn)行一定的數(shù)據(jù)交換處理,這樣可以很好的達(dá)到用戶操作體驗(yàn)感,接下來(lái)通過(guò)本文給大家介紹基于BootStrap Metronic開發(fā)框架經(jīng)驗(yàn)小結(jié)【七】數(shù)據(jù)的導(dǎo)入、導(dǎo)出及附件的查看處理相關(guān)知識(shí),非常具有參考價(jià)值,感興趣的朋友一起學(xué)習(xí)吧
    2016-05-05
  • 微信小程序語(yǔ)音同步智能識(shí)別的實(shí)現(xiàn)案例代碼解析

    微信小程序語(yǔ)音同步智能識(shí)別的實(shí)現(xiàn)案例代碼解析

    在一些小程序的開發(fā)場(chǎng)景中經(jīng)常會(huì)有語(yǔ)音轉(zhuǎn)文字的需求,今天小編通過(guò)實(shí)際案例給大家分享微信小程序語(yǔ)音同步智能識(shí)別功能,需要的朋友可以參考下
    2020-05-05
  • js實(shí)現(xiàn)固定區(qū)域內(nèi)的不重疊隨機(jī)圓

    js實(shí)現(xiàn)固定區(qū)域內(nèi)的不重疊隨機(jī)圓

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)固定區(qū)域內(nèi)的不重疊隨機(jī)圓,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • js方法數(shù)據(jù)驗(yàn)證的簡(jiǎn)單實(shí)例

    js方法數(shù)據(jù)驗(yàn)證的簡(jiǎn)單實(shí)例

    下面小編就為大家?guī)?lái)一篇js方法數(shù)據(jù)驗(yàn)證的簡(jiǎn)單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-09-09
  • JavaScript ( (__ = !$ + $)[+$] + ({} + $)[_/_] +({} + $)[_/_] )

    JavaScript ( (__ = !$ + $)[+$] + ({} + $)[_/_] +({} + $)[_/_

    今天在網(wǎng)上看到一篇很有意思的文章(需翻墻),解釋了幾段非常有趣的 JavaScript 代碼。你猜下面這段 JavaScript 代碼是什么意思?
    2011-02-02

最新評(píng)論