ResizeObserver 它允许开发者监听元素的尺寸变化。 在前端开发中,元素尺寸的变化可能会受到许多因素的影响,例如窗口大小调整、设备方向变化、内部内容变化等。 提供了一种高效的方法来响应这些变化,而不需要频繁使用事件监听器或轮询技术。
1. 使用方法
const ro = new ResizeObserver(entries => { for (let entry of entries) { const { width, height } = entry.contentRect; console.log(`Element size: ${width} x ${height}`); } }); // 开始监听目标元素 const targetElement = document.querySelector('.resize-me'); ro.observe(targetElement); // 停止监听 // ro.unobserve(targetElement);
2. 监听多个元素
const targetElements = document.querySelectorAll('.resize-me'); targetElements.forEach(elem => { ro.observe(elem); });
3. 应用场景
- **响应式布局**: 随着元素尺寸的变化,动态调整布局或样式。 - **动态容器**: 监听内容动态加载的容器的尺寸,以便进行布局调整。 - **Canvas 渲染**: 根据容器的尺寸变化,动态调整 canvas 的渲染尺寸或内容。 - **SVG 调整**: 动态调整 SVG 图形的尺寸或形状。
4. 浏览器兼容性
在现代浏览器中得到了广泛的支持,但老版本的浏览器可能不支持。为了解决这个问题,可以使用resize-observer-polyfill,这是一个为老版本浏览器提供 ResizeObserver 功能的 polyfill。 - Chrome 64+ - Firefox 69+ - Safari 13.1+ - Edge 79+ 但是,总是建议开发者查阅最新的兼容性数据,例如可以访问 查看兼容 以获取最新的浏览器支持信息。