HTML5 词条目录
前端Wiki/词条/ResizeObserver 尺寸监听

ResizeObserver 尺寸监听

定义异步监听元素尺寸变化,无论视口还是内容引起的宽高改变都能感知

window 的 resize 事件只反映视口变化,元素自身的尺寸改变(内容增删、容器布局、折叠面板展开)无法得知。ResizeObserver 观察任意元素,尺寸一变就在回调里给出 contentRect(width/height/x/y),与 IntersectionObserver 一样是异步批量回调。

用途包括:容器查询的基础(容器尺寸驱动样式切换)、图表自适应重绘、弹层随内容定位、字体随容器缩放。回调里直接读取布局是安全的,因为浏览器已布局完成;但仍要避免在回调里同步改尺寸引发循环,配 disconnect 或 unobserve 取消监听。

JavaScript
var ro = new ResizeObserver(function (entries) {
  entries.forEach(function (en) {
    var r = en.contentRect;
    en.target.textContent = '当前宽 ' + Math.round(r.width) + 'px,高 ' + Math.round(r.height) + 'px';
    if (r.width < 400) {
      en.target.style.background = '#e78a3e';
    } else {
      en.target.style.background = '#4a9eff';
    }
  });
});

var box = document.createElement('div');
box.style.cssText = 'width: 60%; padding: 16px; color: #fff; border-radius: 8px;';
box.textContent = '拖动窗口看我变化';
document.body.appendChild(box);
ro.observe(box);
⚠ 常见误区
🔗 相关词条阴影简单动画
← 返回来源章节简单动画