91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ResizeObserver怎么監視DOM大小變化

發布時間:2022-10-10 09:53:11 來源:億速云 閱讀:98 作者:iii 欄目:開發技術

本篇內容主要講解“ResizeObserver怎么監視DOM大小變化”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“ResizeObserver怎么監視DOM大小變化”吧!

引言

ResizeObserver 用于監聽元素的大小尺寸變化,常見用于監聽自適應大小的元素變化引起的寬高變化時處理應寬高變化而需要 JS 做特定處理的場景。

說下我自己使用中遇到的三個場景:

  • Tabs 組件的頭部區域在超過寬度/高度時需要展示出超出滾動按鈕

  • 組件中存在超出隱藏的場景,如多個標簽超出一行后將剩余標簽進行壓縮等

  • Table 組件橫向滾動如果存在某幾列數據需要固定展示的情況下需要根據寬度來計算是否需要出現滾動條和滾動體室陰影

可以看出上面幾個場景共性:當樣式需要自適應寬高,而腳本又需要按照元素寬高來執行某些操作時。這些場景使用 ResizeObserver 就可以比較方便的進行處理。

使用

使用 ResizeObserver 第一步同樣是先需要實例化一個 observer,第二步便是使用 observerobserve 將需要監聽的元素添加到監視列表中:

const observer = new ResizeObserver((entries, observer) => {
    entries.forEach(entry => {
        console.log(entry);
    });
});
observer.observe(target);

實例化時只需要接受一個參數:尺寸變化時的回調,回調函數中的 entries 則是所有添加到監視列表中的元素的 entry 信息列表,而 observer 同樣是上面實例化的 observer 的引用。

ResizeObserver怎么監視DOM大小變化

Script

const observer = new ResizeObserver(entries => {
  entries.forEach(entry => {
    console.log(entry);
  })
})
observer.observe(document.getElementById('target'));

entry

entry 中包括以下五個屬性:

  • borderBoxSize: 監聽元素的 borderBox 尺寸

  • contentBoxSize: 監聽元素的 contentBox 尺寸

  • devicePixelContentBoxSize: 監聽元素的 contentBox 尺寸,不過是設備像素維度,而不是展示維度

  • contentRect: 監聽元素的 contentRect 信息,同 getClientRects

  • targetentry 所屬的監聽元素

borderBoxcontentBox 就是我們常說的 CSS 盒模型中的 borderBoxcontentBoxentry 中的 borderBoxSizecontentBoxSize 中包含兩個屬性:blockSizeinlineSize,這兩個屬性的值與頁面元素的 writing-mode 相關,默認情況下 blockSize 為縱向尺寸一般為高度,inlineSize 為橫向尺寸一般為寬度。而當書寫模式為縱向時,blockSizeinlineSize 的縱橫向關系會調換。

devicePixelContentBoxSize 則和設備像素比相關,在移動設備或是高分辨率屏幕中會與 CSS 像素存在差異。

其它 API

除了 observe 外,observer 還提供了 unobserve 來解除某個元素的監聽,或直接調用 disconnect 來關閉對所有元素的監聽。

兼容與 polyfill

ResizeObserver 的兼容性較差,一般情況下推薦需要使用 polyfill 來進行補全:

  • chrome 64

  • edge 79

  • firefox 69

  • safari 13.1

  • ie 不支持

到此,相信大家對“ResizeObserver怎么監視DOM大小變化”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新丰县| 胶州市| 淳化县| 宜黄县| 九龙坡区| 花莲市| 天水市| 盖州市| 芜湖县| 化隆| 叶城县| 云阳县| 赤壁市| 红桥区| 襄樊市| 清河县| 南康市| 神木县| 安国市| 泗阳县| 新乡县| 韩城市| 承德市| 宁武县| 武义县| 新建县| 原阳县| 五华县| 博兴县| 邹平县| 开原市| 高尔夫| 安西县| 靖远县| 安多县| 蒙山县| 明水县| 丰原市| 攀枝花市| 竹溪县| 库车县|