• Vue中 引入使用 element-resize-detector 监听 Dom 元素 宽度、高度 变化


    1. 前言

    很多做pc端平台的小伙伴都遇到过这样一个问题:在做侧边栏菜单时会有一个收缩和展开的一个功能,在伸缩的过程中右边的页面的宽度就会随之改变。我上网查了查 ,也动手试了试 window.onresize = ()=>{}。却不尽人意,因为它只能检测浏览器大小的变化,完全跟我们的需求不沾边。为解决类似此问题,我们可使用 element-resize-detector。

    在这里插入图片描述

    安装及相关文档
    npm i element-resize-detector
    
    • 1

    element-resize-detector npm 地址

    API描述
    listenTo(element, listener) or listenTo(options, element, listener)侦听用于调整大小事件的元素,并调用侦听器函数,将该元素作为调整大小事件中的参数。传递给函数的选项将覆盖实例选项。
    removeListener(element, listener)从元素中移除侦听器。
    removeAllListeners(element)从元素中删除所有侦听器,但不会完全删除检测器。如果您稍后可能添加侦听器,并且不希望检测器再次初始化,请使用此函数。
    uninstall(element)完全删除检测器和所有侦听器。
    initDocument(document)如果需要侦听另一个文档(如:iframe)中的元素,则需要使用此函数初始化该文档。否则,库将无法检测元素何时附加到文档。因此,对于 iframe,简单地调用 erd.initDocument( iframe.contentDocument );当 iframe 第一次安装在 DOM 上时。创建元素调整大小检测器实例的文档将自动初始化。注意:当 iframe 加载其内容时,会创建一个新文档。因此,对于 iframe,请确保为每个 onLoad iframe 事件调用此函数。

    注意事项

    • 如果元素具有 position:static,它将更改为 position:relative。因此,将应用任何无意的 top / right / bottom / left / z-index 样式,并且绝对定位的子项将相对于元素定位。
    • 隐藏元素将作为元素的直接子元素注入。
    全局引入
    // main.js (组件中按需引入方式,见2.使用方法中代码)
    import ElementResizeDetectorMaker from "element-resize-detector";
    Vue.prototype.$erd = ElementResizeDetectorMaker();
    
    • 1
    • 2
    • 3

    2. 使用方法

    <template>
      <div class="wrap">
        <div 
          class="left" 
          :style="{width:`${leftWidth}`}">
          <button @click="changeWidth">changeWidth</button>
        </div>
      </div>
    </template>
    
    <script>
    export default {
      data() {
        return {
          leftWidth:'70%',
        };
      },
      methods:{
        changeWidth(){
          this.leftWidth == '70%' ? this.leftWidth = '50%' : this.leftWidth = '70%';
        },
      },
      mounted() {
        const elementResizeDetectorMaker = require("element-resize-detector");
        let erd = elementResizeDetectorMaker();
        erd.listenTo(document.querySelector(".left"), (ele) => {
          console.log(ele,ele.offsetWidth,ele.offsetHeight)
        });
      },
    };
    </script>
    
    <style scoped lang="scss">
    .left{
      height: 200px;
      background-color: pink;
    }
    </style>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    在这里插入图片描述

  • 相关阅读:
    成熟ICT测试系统与LabVIEW定制开发的比较
    grpc的metadata---拦截器--验证器--状态码-yapi安装
    Vue中数组操作方法有哪些?
    用go获取IPv4地址,WLAN的IPv4地址,本机公网IP地址详解
    (211)Verilog HDL:周期为1000的计数器
    Python爬虫入门
    基于Android Studio+Android SDK的手机通讯录管理软件设计
    十三、企业开发(5)
    【前沿技术RPA】 一文了解UiPath的项目活动设置
    详解ES6的Promise
  • 原文地址:https://blog.csdn.net/ZYS10000/article/details/127594209