美文网首页
div元素监听resize的方法

div元素监听resize的方法

作者: 捞兴 | 来源:发表于2020-12-28 15:29 被阅读0次

公司有个新需求,要给ios那边传送文章的高度,好让ios完成一个复杂布局。
我这边的内容是后台富文本编辑好的html文件,包括了图片视频文字等内容,所以全部加载完成前高度是一直发生变化的。
一开始做的时候没想得太仔细,html内容加载后我就读取高度了,这就导致一些图片还没加载完全时,整个内容高度就读取了,造成高度过小,后台换了个思路想遍历所有图片和视频的内容,用onLoad钩子监听这些元素是否加载完成,但发现没作用,这种监听法法只适应在比如img标签还没加载进去时就绑定监听事件的,整个html插入后就无法再使用。
最后,百度了一番,看到牛人的杰作,只需创建一个宽高暂满而且不可视的iframe便签,然后监听iframe里面window的resize事件就好了。真是方便啊。
参考文章

<div class="container" id="mapDiv" >
    hello
</div>
function resize (el, cb) {
      // 创建iframe标签,设置样式并插入到被监听元素中
      var iframe = document.createElement('iframe');
      iframe.setAttribute('class', 'size-watch');
      el.appendChild(iframe);

      // 记录元素当前宽高
      var oldWidth = el.offsetWidth;
      var oldHeight = el.offsetHeight;

      // iframe 大小变化时的回调函数
     function sizeChange () {
         // 记录元素变化后的宽高
         var width = el.offsetWidth;
         var height = el.offsetHeight;
         // 不一致时触发回调函数 cb,并更新元素当前宽高
         if (width !== oldWidth || height !== oldHeight) {
             cb({width: width, height: height}, {width: oldWidth, height: oldHeight});
             oldWidth = width;
             oldHeight = height;
          }
      }

      // 设置定时器用于节流
      var timer = 0;
      // 将 sizeChange 函数挂载到 iframe 的resize回调中
     iframe.contentWindow.onresize = function () {
        clearTimeout(timer);
        timer = setTimeout(sizeChange, 20);
    };
  }
  //var el = document.getElementById("mapDiv");
  var el = document.querySelector('.container');
  resize(el, (val, oldVal) => {
     console.log(`size changed!new: ${JSON.stringify(val)}, old: ${JSON.stringify(oldVal)}`);
  });

相关文章

  • div元素监听resize的方法

    公司有个新需求,要给ios那边传送文章的高度,好让ios完成一个复杂布局。我这边的内容是后台富文本编辑好的html...

  • echarts的resize()方法在过度属性下的表现

    resize方法是监听包含canvas的div的元素的变化的,根据其变化改变自身大小如果为该div元素设置了大小变...

  • div元素focus、blur绑定

    如果要为div元素增加foucs和blur方法监听,需要修改div元素的tabindex属性,设置为-1;

  • CSS3 resize属性

    resize 规定可以由用户调整 div 元素的大小 此属性生效,需要设置元素的 overflow 属性,值可以是...

  • JavaScript * DOM: 监听div的resize事件

    我们平时在监听resize变化时,一般监听的都是window/body。 可以绑定onresize的标签 body...

  • Element分析(工具篇)——ResizeEvent

    说明 用来监听元素的大小改变的。具体原理可以查看我的分析:奇技淫巧——通过scroll来监听resize 源码注解

  • js中的事件传播过程

    引子:父div添加监听事件,子div设置监听事件,点击子元素,会出现什么结果 事件传播的三个过程,事件捕获阶段、处...

  • html生成DOM方法

    常用方法 创建一个元素 div=document.createElement('div');div.innerHT...

  • js手动触发窗口resize事件

    手动触发resize事件: 需要调用时: 增加resize监听事件(局部demo):

  • DOM事件委托

    使用场景 监听重复的事件===>用于节省监听数(内存小) 监听当前暂时还没有的元素===>动态监听元素 使用方法

网友评论

      本文标题:div元素监听resize的方法

      本文链接:https://www.haomeiwen.com/subject/qlxtoktx.html