1.需求场景
开发过程中经常遇到的一个问题就是如何监听一个 div 的size变化。
比如我用canvas绘制了一个chart,当canvas的size发生变化的时候,需要重新绘制里面的内容,这个时候就需要监听resize事件做处理。window上虽然有resize事件监听,但这并不能满足我们的需求,因为很多时候,div的size发生了变化,实际 window.resize 事件并未触发。
对于div的resize事件的监听,实现方式有很多,比如定时器检查,通过scroll事件等等,本文主要介绍通过iframe元素来实现监听。
不过我们可以间接利用window的resize事件监听来实现对于某个div的resize事件监听,请看下面具体实现。
2. 实现原理
动态创建 iframe 标签,追加到容器中,宽高继承容器100%;
获取 iframe 中的window,通过 contentWindow 属性就能获取到;
由于 iframe 的宽高继承与父节点,当父容器宽度发生变化,自然会触发iframe中的resize 事件;
通过 iframeWindow.resize 事件来监听DOM大小变化,从而达到resize事件的一个监听;
例子
document.querySelector("#ifarme_id").contentWindow.addEventListener('resize', () => {
console.log('size Change!');
}, fals