ResizeObserver是新的实验中的API,可以通过构造一个 ResizeObserver 对象以观察者模式监听任意 Element / SvgElement 的尺寸变化。除了chrome 64+ 和最新的 Edge Insider版支持,其他浏览器均不支持此API。但有第三方的polyfill方案,可以支持到 FF44+,IE9+,Edge 10+ ,Safari 11+ ,兼容方案是通过 MutationObserver API 实现的,通过监听 dom 的变化并加以判断,至此主流浏览器均可运行。非轮询监控,所以不会造成性能问题。
que-etc/resize-observer-polyfillgithub.com/que-etc/resize-observer-polyfill
安装和使用
npm:
npm install resize-observer-polyfill --save-dev
使用示例:
// 导入兼容模块
import ResizeObserver from 'resize-observer-polyfill';
const element1 = document.getElementById('div1');
const element2 = document.getElementById('div2');
/*
* 新建以一个观察者,传入一个当尺寸发生变化时的回调处理函数
* 参数entries 是 ResizeObserverEntry 的数组,包含两个属性:
* ResizeObserverEntry.contentRect 包含尺寸信息(x,y,width,height,top,right,left,bottom)
* ResizeObserverEntry.target 目标对象,即当前观察到尺寸变化的对象
*
*/
const robserver = new ResizeObserver( entries => {
for (const entry of entries) {
// 可以通过 判断 entry.target得知当前改变的 Element,分别进行处理。
switch(etry.target){
case element1 :
entry.target.innerHTML = `第一个DIV尺寸 [${entry.contentRect.width} : ${entry.contentRect.height}]`;
break;
case element2 :
entry.target.innerHTML = `第二个DIV尺寸 [${entry.contentRect.width} : ${entry.contentRect.height}]`;
break;
}
}
});
robserver.observe(element1);
robserver.observe(element2);