监听div元素高度变化的方案

Vue代码展示

<div class="box" style="position: relative">
   <iframe
     ref="iframeRefAll"
     style="
       position: absolute;
       top: 0;
       width: 0;
       z-index: -1;
       height: 100%;
     "
   ></iframe>
   <!-- ...代表需要渲染的内容 -->
   ...
 </div>
mounted() {
    // 绑定监听事件
	this.initListener();
}methods: {
	initListener() {
      const _this = this;
      const ifr = this.$refs.iframeRefAll;
      if (!ifr) return;
      ifr.contentWindow.onresize = () => {
        // ... 代表在div.box高度发生变化时,需要做的程序处理
        ...
      };
    },
}

问题

需要监听 div.box 元素的高度变化,在该元素高度发生改变时做一些程序处理。

问题是:在浏览器渲染img标签时src如果为一个url地址,浏览器为避免阻塞其他元素的渲染,请求该地址的过程是异步的,这导致**“需要渲染的内容”**在DOM被挂载后也会存在高度的变化【img请求完成后,获得高度,撑高div.box元素】

原理:

  1. iframe 设置了高度100%
  2. div.box 元素高度发生改变时,iframe 高度会随之改变
  3. iframe高度的改变意味iframe的窗口调整事件被触发
  4. 由此,监听iframe的onresize窗口调整事件变相达到监听div.box元素高度变化的目的

属性详解

position: absolute;:定位元素脱离文档流,使外层包裹元素div.box的高度仅由 “需要渲染的内容” 决定
width: 0;:隐藏iframe元素的方式
z-index: -1;:使iframe被 “需要渲染的内容” 的遮盖,无法点击

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值