JS監(jiān)聽(tīng)元素dom變化方案詳解
前言
我們?cè)陂_(kāi)發(fā)中,會(huì)遇到一些需求,需要監(jiān)聽(tīng)元素變化,比如元素屬性變化,元素大小變化,今天,我們就來(lái)聊聊倆種常用實(shí)現(xiàn)監(jiān)聽(tīng)的方案,其他的自行研究
一、ResizeObserver
ResizeObserver
是來(lái)監(jiān)聽(tīng)元素的大小位置發(fā)生變化,也可以說(shuō)是回流(重排)時(shí)的變化
<div style="width: 100vw; height: 100vh; background-color: deepskyblue" id="bg">
然后,我們創(chuàng)建監(jiān)聽(tīng)器,進(jìn)行監(jiān)聽(tīng)
// 觀察元素變化 let el = document.getElementById('bg') // 創(chuàng)建監(jiān)聽(tīng)器 let ob = new ResizeObserver(entries => { for (let entry of entries) { // 監(jiān)聽(tīng)到的元素 console.log(entry) } }) // 監(jiān)聽(tīng)尺寸變化 ob.observe(el)
隨之,拖動(dòng)瀏覽器窗口,控制臺(tái)會(huì)打印,我們可以看到打印的日志,包含元素的大小信息
在使用完畢時(shí),可以進(jìn)行監(jiān)聽(tīng)結(jié)束
ob.unobserve(el)
二、MutationObserver
MutationObserver
是用來(lái)監(jiān)聽(tīng)DOM樹(shù)的修改,MutationObserver
可以監(jiān)聽(tīng)的屬性(配置)
屬性名 | 詳情 | 默認(rèn)值 |
---|---|---|
attributes | 設(shè)為 true 以觀察受監(jiān)視元素的屬性值變更 | false |
attributeFilter | 要監(jiān)視的特定屬性名稱(chēng)的數(shù)組。如果未包含此屬性,則對(duì)所有屬性的更改都會(huì)觸發(fā)變動(dòng)通知 | 無(wú) |
characterData | 設(shè)為 true 以監(jiān)視指定目標(biāo)節(jié)點(diǎn)或子節(jié)點(diǎn)樹(shù)中節(jié)點(diǎn)所包含的字符數(shù)據(jù)的變化 | 無(wú) |
childList | 設(shè)為 true 以監(jiān)視目標(biāo)節(jié)點(diǎn)(如果 subtree 為 true,則包含子孫節(jié)點(diǎn))添加或刪除新的子節(jié)點(diǎn) | false |
subtree | 其他值也會(huì)作用于此子樹(shù)下的所有節(jié)點(diǎn),而不僅僅只作用于目標(biāo)節(jié)點(diǎn) | false |
實(shí)現(xiàn)過(guò)程:
// 創(chuàng)建監(jiān)聽(tīng)器 let ob = new MutationObserver(entries => { console.log(entries) }) // 監(jiān)聽(tīng)元素變化 ob.observe(el, { attributes: true, subtree: true }) // 修改背景顏色 el.style.backgroundColor = 'red'
我們可以看到控制臺(tái),打印日志,觸發(fā)更新:
取消監(jiān)聽(tīng):
ob.disconnect()
總結(jié)
到此這篇關(guān)于JS監(jiān)聽(tīng)元素dom變化的文章就介紹到這了,更多相關(guān)JS監(jiān)聽(tīng)元素dom內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
dropdownlist之間的互相聯(lián)動(dòng)實(shí)現(xiàn)(顯示與隱藏)
dropdownlist之間的互相聯(lián)動(dòng)(顯示與隱藏)2009-11-11url地址自動(dòng)加#號(hào)問(wèn)題說(shuō)明
# 包含了一個(gè)位置信息,默認(rèn)的錨點(diǎn)是#top 也就是網(wǎng)頁(yè)的上端,而javascript:void(0) 僅表示一個(gè)死鏈接。2010-08-08JavaScript實(shí)現(xiàn)將數(shù)組中所有元素連接成一個(gè)字符串的方法
這篇文章主要介紹了JavaScript實(shí)現(xiàn)將數(shù)組中所有元素連接成一個(gè)字符串的方法,涉及javascript中采用join方法進(jìn)行數(shù)組轉(zhuǎn)化的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04JavaScript使用setTimeout實(shí)現(xiàn)延遲彈出警告框的方法
這篇文章主要介紹了JavaScript使用setTimeout實(shí)現(xiàn)延遲彈出警告框的方法,實(shí)例分析了javascript中setTimeout函數(shù)的使用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04JavaScript實(shí)現(xiàn)將數(shù)組數(shù)據(jù)添加到Select下拉框的方法
這篇文章主要介紹了JavaScript實(shí)現(xiàn)將數(shù)組數(shù)據(jù)添加到Select下拉框的方法,涉及javascript數(shù)組操作及頁(yè)面元素動(dòng)態(tài)賦值的相關(guān)技巧,需要的朋友可以參考下2015-08-08