ResizeObserver 監(jiān)視 DOM大小變化示例詳解
引言
ResizeObserver 用于監(jiān)聽元素的大小尺寸變化,常見用于監(jiān)聽自適應大小的元素變化引起的寬高變化時處理應寬高變化而需要 JS 做特定處理的場景。
說下我自己使用中遇到的三個場景:
Tabs組件的頭部區(qū)域在超過寬度/高度時需要展示出超出滾動按鈕- 組件中存在超出隱藏的場景,如多個標簽超出一行后將剩余標簽進行壓縮等
Table組件橫向滾動如果存在某幾列數(shù)據(jù)需要固定展示的情況下需要根據(jù)寬度來計算是否需要出現(xiàn)滾動條和滾動體室陰影
可以看出上面幾個場景共性:當樣式需要自適應寬高,而腳本又需要按照元素寬高來執(zhí)行某些操作時。這些場景使用 ResizeObserver 就可以比較方便的進行處理。
使用
使用 ResizeObserver 第一步同樣是先需要實例化一個 observer,第二步便是使用 observer 的 observe 將需要監(jiān)聽的元素添加到監(jiān)視列表中:
const observer = new ResizeObserver((entries, observer) => {
entries.forEach(entry => {
console.log(entry);
});
});
observer.observe(target);實例化時只需要接受一個參數(shù):尺寸變化時的回調(diào),回調(diào)函數(shù)中的 entries 則是所有添加到監(jiān)視列表中的元素的 entry 信息列表,而 observer 同樣是上面實例化的 observer 的引用。

Script
const observer = new ResizeObserver(entries => {
entries.forEach(entry => {
console.log(entry);
})
})
observer.observe(document.getElementById('target'));entry
entry 中包括以下五個屬性:
borderBoxSize: 監(jiān)聽元素的borderBox尺寸contentBoxSize: 監(jiān)聽元素的contentBox尺寸devicePixelContentBoxSize: 監(jiān)聽元素的contentBox尺寸,不過是設備像素維度,而不是展示維度contentRect: 監(jiān)聽元素的contentRect信息,同getClientRectstarget:entry所屬的監(jiān)聽元素
borderBox 和 contentBox 就是我們常說的 CSS 盒模型中的 borderBox 和 contentBox,entry 中的 borderBoxSize 和 contentBoxSize 中包含兩個屬性:blockSize 和 inlineSize,這兩個屬性的值與頁面元素的 writing-mode 相關,默認情況下 blockSize 為縱向尺寸一般為高度,inlineSize 為橫向尺寸一般為寬度。而當書寫模式為縱向時,blockSize、inlineSize 的縱橫向關系會調(diào)換。
而 devicePixelContentBoxSize 則和設備像素比相關,在移動設備或是高分辨率屏幕中會與 CSS 像素存在差異。
其它 API
除了 observe 外,observer 還提供了 unobserve 來解除某個元素的監(jiān)聽,或直接調(diào)用 disconnect 來關閉對所有元素的監(jiān)聽。
兼容與 polyfill
ResizeObserver 的兼容性較差,一般情況下推薦需要使用 polyfill 來進行補全:
chrome64edge79firefox69safari13.1ie不支持
常用的 polyfill:www.npmjs.com/package/res…
以上就是ResizeObserver 監(jiān)視 DOM大小變化示例詳解的詳細內(nèi)容,更多關于ResizeObserver 監(jiān)視 DOM 的資料請關注腳本之家其它相關文章!
相關文章
ComponentLoader?與動態(tài)組件實例詳解
這篇文章主要為大家介紹了ComponentLoader?與動態(tài)組件實現(xiàn)實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-05-05
electron創(chuàng)建新窗口模態(tài)框并實現(xiàn)主進程傳值給子進程
這篇文章主要為大家介紹了electron創(chuàng)建新窗口模態(tài)框并實現(xiàn)主進程傳值給子進程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-02-02

