写一个方法监听DOM宽高的变化

有多种方法可以监听 DOM 元素宽高的变化,以下是几种常见且有效的方法:

1. ResizeObserver (推荐)

ResizeObserver 是监听元素尺寸变化的现代化 API,兼容性良好,性能出色。它可以监听元素内容区域、边框框、以及 padding 区域的变化。

const element = document.getElementById('myElement');

const resizeObserver = new ResizeObserver(entries => {
  for (let entry of entries) {
    const { contentRect } = entry;
    console.log('Element size changed:', contentRect.width, contentRect.height);
    // 在这里执行你想要的操作,例如重新布局或更新相关数据
  }
});

resizeObserver.observe(element);

// 可选:停止监听
// resizeObserver.unobserve(element);
// resizeObserver.disconnect(); // 停止监听所有元素

2. getBoundingClientRect() + requestAnimationFrame (对于需要高性能的场景)

getBoundingClientRect() 方法可以获取元素的位置和尺寸信息。结合 requestAnimationFrame 可以优化性能,避免过度绘制。

const element = document.getElementById('myElement');
let lastWidth = element.getBoundingClientRect().width;
let lastHeight = element.getBoundingClientRect().height;

function checkSizeChanges() {
  const { width, height } = element.getBoundingClientRect();
  if (width !== lastWidth || height !== lastHeight) {
    console.log('Element size changed:', width, height);
    // 执行相关操作
    lastWidth = width;
    lastHeight = height;
  }
  requestAnimationFrame(checkSizeChanges);
}

requestAnimationFrame(checkSizeChanges);

3. MutationObserver (监听属性变化)

虽然 MutationObserver 主要用于监听 DOM 结构的变化,但也可以用来监听元素属性的变化,例如 style 属性,从而间接地监听宽高变化。不过,这种方法不如 ResizeObserver 直接和高效。

const element = document.getElementById('myElement');

const observer
posted @ 2024-12-09 09:11  王铁柱6  阅读(260)  评论(0)    收藏  举报