最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ResizeObserver 監(jiān)視 DOM大小變化示例詳解

 更新時間:2022年10月08日 17:18:10   作者:嘿嘿Z  
這篇文章主要為大家介紹了ResizeObserver 監(jiān)視 DOM大小變化示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

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

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

  • Tabs 組件的頭部區(qū)域在超過寬度/高度時需要展示出超出滾動按鈕
  • 組件中存在超出隱藏的場景,如多個標(biāo)簽超出一行后將剩余標(biāo)簽進(jìn)行壓縮等
  • Table 組件橫向滾動如果存在某幾列數(shù)據(jù)需要固定展示的情況下需要根據(jù)寬度來計算是否需要出現(xiàn)滾動條和滾動體室陰影

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

使用

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

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

實(shí)例化時只需要接受一個參數(shù):尺寸變化時的回調(diào),回調(diào)函數(shù)中的 entries 則是所有添加到監(jiān)視列表中的元素的 entry 信息列表,而 observer 同樣是上面實(shí)例化的 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 尺寸,不過是設(shè)備像素維度,而不是展示維度
  • contentRect: 監(jiān)聽元素的 contentRect 信息,同 getClientRects
  • targetentry 所屬的監(jiān)聽元素

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

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

其它 API

除了 observe 外,observer 還提供了 unobserve 來解除某個元素的監(jiān)聽,或直接調(diào)用 disconnect 來關(guān)閉對所有元素的監(jiān)聽。

兼容與 polyfill

ResizeObserver 的兼容性較差,一般情況下推薦需要使用 polyfill 來進(jìn)行補(bǔ)全:

  • chrome 64
  • edge 79
  • firefox 69
  • safari 13.1
  • ie 不支持

常用的 polyfillwww.npmjs.com/package/res…

以上就是ResizeObserver 監(jiān)視 DOM大小變化示例詳解的詳細(xì)內(nèi)容,更多關(guān)于ResizeObserver 監(jiān)視 DOM 的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論

灵川县| 大方县| 托克托县| 连山| 桑植县| 碌曲县| 定兴县| 咸阳市| 工布江达县| 新乐市| 连州市| 五河县| 华宁县| 句容市| 聂荣县| 扎鲁特旗| 澳门| 漾濞| 贵港市| 祁门县| 读书| 遂昌县| 通海县| 华池县| 台安县| 新昌县| 莎车县| 分宜县| 普格县| 拉萨市| 隆尧县| 兰西县| 顺昌县| 宁阳县| 天祝| 清河县| 敖汉旗| 阜新市| 涡阳县| 晋宁县| 莎车县|