亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

談談IntersectionObserver懶加載的具體使用

 更新時間:2019年10月15日 09:01:06   作者:小心夾手  
這篇文章主要介紹了談談IntersectionObserver懶加載的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

概念

IntersectionObserver接口(從屬于Intersection Observer API)為開發(fā)者提供了一種可以異步監(jiān)聽目標元素與其祖先或視窗(viewport)交叉狀態(tài)的手段。祖先元素與視窗(viewport)被稱為根(root)。

這是MDN上給的官方概念,不用去管它,我粘出來只是為了顯得專業(yè)點嘛...

重點看這里 監(jiān)聽目標元素與其祖先或視窗交叉狀態(tài)的手段 ,其實就是觀察一個元素是否在視窗可見。

可以看到,交叉了就是說明當前元素在視窗里,當前就是可見的了。

API

var io = new IntersectionObserver(callback, options)

其實就是一個簡單的構造函數。

以上代碼會返回一個 IntersectionObserver 實例, callback 是當元素的可見性變化時候的回調函數, options 是一些配置項(可選)。

我們使用返回的這個實例來進行一些操作。

io.observe(document.querySelector('img')) 開始觀察,接受一個DOM節(jié)點對象
io.unobserve(element) 停止觀察 接受一個element元素
io.disconnect() 關閉觀察器

options

root

用于觀察的根元素,默認是瀏覽器的視口,也可以指定具體元素,指定元素的時候用于觀察的元素必須是指定元素的子元素

threshold

用來指定交叉比例,決定什么時候觸發(fā)回調函數,是一個數組,默認是 [0] 。

const options = {
	root: null,
	threshold: [0, 0.5, 1]
}
var io = new IntersectionObserver(callback, options)
io.observe(document.querySelector('img'))

上面代碼,我們指定了交叉比例為0,0.5,1,當觀察元素img0%、50%、100%時候就會觸發(fā)回調函數

rootMargin

用來擴大或者縮小視窗的的大小,使用css的定義方法, 10px 10px 30px 20px 表示top、right、bottom 和 left的值

const options = {
	root: document.querySelector('.box'),
	threshold: [0, 0.5, 1],
	rootMargin: '30px 100px 20px'
}

為了方便理解,我畫了張圖,如下

首先我們來看下圖上的問題,藍線是什么呢?他就是咱們定義的root元素,我們添加了 rootMargin 屬性,將視窗的增大了,虛線就是現(xiàn)在的視窗,所以元素現(xiàn)在也就在視窗里面了。

由此可見,root元素只有在 rootMargin 為空的時候才是絕對的視窗。

說了簡單的options,接下來我們看下 callback 。

callback

上面我們說到,當元素的可見性變化時,就會觸發(fā)callback函數。

callback函數會觸發(fā)兩次,元素進入視窗(開始可見時)和元素離開視窗(開始不可見時)都會觸發(fā)

var io = new IntersectionObserver((entries)=>{
	console.log(entries)
})

io.observe($0)

以上代碼,請在chrome控制臺進行調試,這里我使用了 $0 選擇了上一次我審查元素的選擇的節(jié)點

運行結果如下

我們可以看到callback函數有個 entries 參數,它是個 IntersectionObserverEntry 對象數組,接下來我們重點說下IntersectionObserverEntry對象

IntersectionObserverEntry

IntersectionObserverEntry 提供觀察元素的信息,有七個屬性。

boundingClientRect 目標元素的矩形信息 intersectionRatio 相交區(qū)域和目標元素的比例值 intersectionRect/boundingClientRect 不可見時小于等于0 intersectionRect 目標元素和視窗(根)相交的矩形信息 可以稱為相交區(qū)域 isIntersecting 目標元素當前是否可見 Boolean值 可見為true rootBounds 根元素的矩形信息,沒有指定根元素就是當前視窗的矩形信息 target 觀察的目標元素 time 返回一個記錄從 IntersectionObserver 的時間到交叉被觸發(fā)的時間的時間戳

上面幾個矩形信息的關系如下

劃重點

intersectionRatio和 isIntersecting 是用來判斷元素是否可見的,押題咯...

懶加載

好了,通過上面一些概念我們大概了解了 IntersectionObserver 是個什么東西,接下來我們用它來寫點代碼,寫什么呢?沒錯就是懶加載。

通過IntersectionObserver來實現(xiàn)懶加載,就簡單的多了,我們只需要設置回調,判斷當前元素是否可見,再進行渲染操作就行了,而不用去關心內部的計算。

主要代碼如下

const io = new IntersectionObserver(()=>{ // 實例化 默認基于當前視窗
	
}) 

let ings = document.querySelectorAll('[data-src]') // 將圖片的真實url設置為data-src src屬性為占位圖 元素可見時候替換src

function callback(entries){ 
	entries.forEach((item) => { // 遍歷entries數組
		if(item.isIntersecting){ // 當前元素可見
			item.target.src = item.target.dataset.src // 替換src
			io.unobserve(item.target) // 停止觀察當前元素 避免不可見時候再次調用callback函數
		}	
	})
}

imgs.forEach((item)=>{ // io.observe接受一個DOM元素,添加多個監(jiān)聽 使用forEach
	io.observe(item)
})

本想錄制個GIF圖,使用Recordlt始終上傳不了,誰有好用的GIF圖錄制軟件請推薦個,不勝感激。。

吶,給你花:rose:

因篇幅有限,完整代碼請戳 github

注意

目前IntersectionObserver是一個實驗中的功能,請酌情使用。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 兼容低版本IE的JScript5.5實現(xiàn)

    兼容低版本IE的JScript5.5實現(xiàn)

    兼容低版本IE的JScript5.5實現(xiàn)...
    2006-09-09
  • js驗證表單大全

    js驗證表單大全

    js驗證表單大全...
    2006-11-11
  • JS中如何比較兩個Json對象是否相等實例代碼

    JS中如何比較兩個Json對象是否相等實例代碼

    這篇文章主要介紹了JS中如何比較兩個Json對象是否相等實例代碼的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-07-07
  • javascript表單驗證 - Parsley.js使用和配置

    javascript表單驗證 - Parsley.js使用和配置

    大家還記得我們曾經介紹過的表單驗證jquery插件jquery.validationEngine吧;天介紹的Parsley同樣也可以幫助你只使用簡單的配置即可實現(xiàn)表單驗證功能,基于它的強大DOM-API,感興趣的你可以不要錯過了哦
    2013-01-01
  • 基于JavaScript編寫8086匯編指令查詢工具

    基于JavaScript編寫8086匯編指令查詢工具

    匯編語言還是在大學的時候學的,匯編語言有個特點是語句短、條數多,很難可以把全部指令都背熟。本文就來用JavaScript編寫一個8086匯編指令查詢工具,希望對大家有所幫助
    2023-02-02
  • json傳值以及ajax接收詳解

    json傳值以及ajax接收詳解

    下面小編就為大家?guī)硪黄猨son傳值以及ajax接收詳解。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05
  • JavaScript數據結構Number

    JavaScript數據結構Number

    這篇文章主要介紹了JavaScript數據結構Number,Number?是JavaScript的基本數據結構,是對應數值的應用類型,下文給大家分享JavaScript使用?Number?的常見問題,需要的朋友可以參考一下
    2022-02-02
  • socket在egg中的使用實例代碼詳解

    socket在egg中的使用實例代碼詳解

    這篇文章主要介紹了socket在egg中的使用,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-05-05
  • 只需一行代碼,輕松實現(xiàn)一個在線編輯器

    只需一行代碼,輕松實現(xiàn)一個在線編輯器

    在瀏覽器地址欄中輸入一行代碼:data:text/html, <html contenteditable> ,回車即可把瀏覽器變臨時編輯器(需要瀏覽器支持 HTML5 屬性 contenteditable)
    2013-11-11
  • JavaScript實現(xiàn)拖拽元素對齊到網格(每次移動固定距離)

    JavaScript實現(xiàn)拖拽元素對齊到網格(每次移動固定距離)

    最近在做一個拖拽元素的附加功能,就是對齊到網格,實際上就是確定好元素的初始位置,然后拖拽元素時,每次移動固定的距離。讓元素都可以在網格內對齊
    2016-11-11

最新評論