写一个方法监听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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了