Skip to main content

ResizeObserver

· 2 min read
赵炜

MDN 地址:https://developer.mozilla.org/zh-CN/docs/Web/API/ResizeObserver

ResizeObserver 接口监视 Element 内容区域或者 SVGElement 边界尺寸的变化。

用法

构造函数

ResizeObserver 构造函数创建一个新的 ResizeObserver 对象,它可以用于监听 Element 内容盒或边框盒或者 SVGElement 边界尺寸的大小。

new ResizeObserver(callback);

callback

每当观测的元素调整大小时,调用该函数。该函数接收两个参数:

  • entries: 一个 ResizeObserverEntry 对象数组,可以用于获取每个元素改变后的新尺寸。
  • observer: 对 ResizeObserver 自身的引用,因此需要它的时候,你要从回调函数的内部访问。例如,这可用于在达到特定的情况时,自动取消对观察者的监听,但如果你不需要它,可以省略它。

实例方法

disconnect

取消当前 resizeObserver 上,所有 DOM 元素的监听

resizeObserver.disconnect();

observe

用于监听指定的 Element 或 SVGElement

observe(target);
observe(target, options);
  • target: 需要监听的元素

unobserve

取消指定 Element 或 SVGElement 的监听

unobserve(target);

MDN 例子片段

const resizeObserver = new ResizeObserver((entries) => {
  for (let entry of entries) {
    if (entry.contentBoxSize) {
      h1Elem.style.fontSize = `${Math.max(1.5, entry.contentBoxSize.inlineSize / 200)}rem`;
      pElem.style.fontSize = `${Math.max(1, entry.contentBoxSize.inlineSize / 600)}rem`;
    } else {
      h1Elem.style.fontSize = `${Math.max(1.5, entry.contentRect.width / 200)}rem`;
      pElem.style.fontSize = `${Math.max(1, entry.contentRect.width / 600)}rem`;
    }
  }
});

resizeObserver.observe(divElem);

resizeObserver.unobserve(divElem);