您好,登錄后才能下訂單哦!
本篇內容主要講解“ResizeObserver怎么監視DOM大小變化”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“ResizeObserver怎么監視DOM大小變化”吧!
ResizeObserver
用于監聽元素的大小尺寸變化,常見用于監聽自適應大小的元素變化引起的寬高變化時處理應寬高變化而需要 JS
做特定處理的場景。
說下我自己使用中遇到的三個場景:
Tabs
組件的頭部區域在超過寬度/高度時需要展示出超出滾動按鈕
組件中存在超出隱藏的場景,如多個標簽超出一行后將剩余標簽進行壓縮等
Table
組件橫向滾動如果存在某幾列數據需要固定展示的情況下需要根據寬度來計算是否需要出現滾動條和滾動體室陰影
可以看出上面幾個場景共性:當樣式需要自適應寬高,而腳本又需要按照元素寬高來執行某些操作時。這些場景使用 ResizeObserver
就可以比較方便的進行處理。
使用 ResizeObserver
第一步同樣是先需要實例化一個 observer
,第二步便是使用 observer
的 observe
將需要監聽的元素添加到監視列表中:
const observer = new ResizeObserver((entries, observer) => { entries.forEach(entry => { console.log(entry); }); }); observer.observe(target);
實例化時只需要接受一個參數:尺寸變化時的回調,回調函數中的 entries
則是所有添加到監視列表中的元素的 entry
信息列表,而 observer
同樣是上面實例化的 observer
的引用。
Script
const observer = new ResizeObserver(entries => { entries.forEach(entry => { console.log(entry); }) }) observer.observe(document.getElementById('target'));
entry
中包括以下五個屬性:
borderBoxSize
: 監聽元素的 borderBox
尺寸
contentBoxSize
: 監聽元素的 contentBox
尺寸
devicePixelContentBoxSize
: 監聽元素的 contentBox
尺寸,不過是設備像素維度,而不是展示維度
contentRect
: 監聽元素的 contentRect
信息,同 getClientRects
target
: entry
所屬的監聽元素
borderBox
和 contentBox
就是我們常說的 CSS
盒模型中的 borderBox
和 contentBox
,entry
中的 borderBoxSize
和 contentBoxSize
中包含兩個屬性:blockSize
和 inlineSize
,這兩個屬性的值與頁面元素的 writing-mode
相關,默認情況下 blockSize
為縱向尺寸一般為高度,inlineSize
為橫向尺寸一般為寬度。而當書寫模式為縱向時,blockSize
、inlineSize
的縱橫向關系會調換。
而 devicePixelContentBoxSize
則和設備像素比相關,在移動設備或是高分辨率屏幕中會與 CSS
像素存在差異。
除了 observe
外,observer
還提供了 unobserve
來解除某個元素的監聽,或直接調用 disconnect
來關閉對所有元素的監聽。
ResizeObserver
的兼容性較差,一般情況下推薦需要使用 polyfill
來進行補全:
chrome
64
edge
79
firefox
69
safari
13.1
ie
不支持
到此,相信大家對“ResizeObserver怎么監視DOM大小變化”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。