1. 程式人生 > 其它 >DOM & BOM – ResizeObserver

DOM & BOM – ResizeObserver

介紹

想監聽一個 element 的 size changes 就可以使用 ResizeObserver 了.

在看這一篇之前, 建議先看看 DOM & BOM – IntersectionObserver, 它們的模式很像, 一起了解會比較容易.

 

效果

參考:

MDN – ResizeObserver

Youtube – Learn Resize Observer In 5 Minutes

 

場景

  <body>
    <button class="button">resize</button>
    <div class="box"
>resize me</div> </body>

CSS Style

.box {
  margin-top: 3rem;
  width: 100px;
  height: 100px;
  background-color: pink;
  border: 2px solid red;
  padding: 1rem;
}

 

new ResizeObserver()

const rs = new ResizeObserver((entries) => {
  console.log("entry", entries[0]);
});

rs.observe(document.querySelector(
".box")); document.querySelector(".button").addEventListener("click", () => { document.querySelector(".box").style.width = "400px"; });

呼叫, observe, unobserve 方式和 IntersectionObserver 是一樣的.

new 例項 > observe > 當觀察的元素 resize 就會觸發回撥. 不想觀察了就 unobserve 或者直接 disconnect 整個 observer.

 

Callback Info

綠點是常用到的, 其它的就不介紹了

 

borderBoxSize, 它是 array 哦, 但我不知道什麼時候會超過 1 個啦.

blockSize 就是 height, inlineSize 就是 width. 這個是 Logical Properties 的寫法.

ContentBoxSize, 顧名思義它就是依據 box-sizing: content-box 的計算方式 (width 不包含 padding 和 border).

contentRect: 它的 width 和 height 是扣除了 padding, border 的, 至於 rect, 它並不是 boundingClientRect 哦, 具體是什麼座標我也沒去研究, 以後有需求在來補上唄.