美文网首页
ResizeObserver

ResizeObserver

作者: 抽疯的稻草绳 | 来源:发表于2021-08-18 17:18 被阅读0次

    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

    image

    安装和使用

    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);
    

    相关文章

      网友评论

          本文标题:ResizeObserver

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