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

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

1. 前言

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

1ecd1b2606ed46e9956a89f231c9802c.png

安装及相关文档

npm i element-resize-detector

element-resize-detector npm 地址

image.png

注意事项

  • 如果元素具有 position:static,它将更改为 position:relative。因此,将应用任何无意的 top / right / bottom / left / z-index 样式,并且绝对定位的子项将相对于元素定位。
  • 隐藏元素将作为元素的直接子元素注入。

全局引入

// main.js (组件中按需引入方式,见2.使用方法中代码)
import ElementResizeDetectorMaker from "element-resize-detector";
Vue.prototype.$erd = ElementResizeDetectorMaker();

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() {
    cons 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>

20201204182323419.gif

相关文章
|
15天前
|
JavaScript
【vue】 vue2 监听滚动条滚动事件
【vue】 vue2 监听滚动条滚动事件
29 1
|
23天前
|
JavaScript
vue 监听 sessionStorage 中值的变化
vue 监听 sessionStorage 中值的变化
43 1
|
24天前
|
JavaScript
vue实战——元素的拖拽 + 控制元素无法拖拽出盒子 + 随元素拖拽自适应变化大小的盒子
vue实战——元素的拖拽 + 控制元素无法拖拽出盒子 + 随元素拖拽自适应变化大小的盒子
18 1
|
15天前
|
JavaScript
【vue】 vue中判断路由变化 | 监听路有变化
【vue】 vue中判断路由变化 | 监听路有变化
18 0
|
22天前
|
JavaScript 前端开发
文本,粘贴事件如何实现,先实现一个小目标,如何存入图片,从本地生成源码,先转成base64,ctrl + v这张图片就显示出来了怎样实现的,Vue可以有方法可以获取粘贴的所有元素,转base64字符串
文本,粘贴事件如何实现,先实现一个小目标,如何存入图片,从本地生成源码,先转成base64,ctrl + v这张图片就显示出来了怎样实现的,Vue可以有方法可以获取粘贴的所有元素,转base64字符串
|
25天前
|
移动开发 JavaScript 前端开发
VUE实现一个列表清单【props 父子组件通信、slot插槽的使用、全局自定义指令的封装、$nextTick解决异步DOM更新、巧用v-model简化父子组件之间的通信、触发事件的事件源event】
VUE实现一个列表清单【props 父子组件通信、slot插槽的使用、全局自定义指令的封装、$nextTick解决异步DOM更新、巧用v-model简化父子组件之间的通信、触发事件的事件源event】
13 0
|
25天前
|
JavaScript
vue 全屏 screenfull —— 整页全屏,指定元素全屏,退出全屏,全屏切换等
vue 全屏 screenfull —— 整页全屏,指定元素全屏,退出全屏,全屏切换等
20 0
|
25天前
|
JavaScript 前端开发 API
Vue Router【详解】含路由配置、路由定义、路由跳转、路由传参、自动注册路由、路由守卫、页面滚动、监听路由、$route、$router、路由过渡动画等
Vue Router【详解】含路由配置、路由定义、路由跳转、路由传参、自动注册路由、路由守卫、页面滚动、监听路由、$route、$router、路由过渡动画等
36 0
|
25天前
|
JavaScript
vue 监听滚动条行为 | 判断滚动条是向上滚动还是向下滚动
vue 监听滚动条行为 | 判断滚动条是向上滚动还是向下滚动
19 0
|
2月前
|
缓存 JavaScript 前端开发
【JavaScript 技术专栏】DOM 操作全攻略:从基础到进阶
【4月更文挑战第30天】本文深入讲解JavaScript与DOM交互,涵盖DOM基础、获取/修改元素、创建/删除元素、事件处理结合及性能优化。通过学习,开发者能掌握动态改变网页内容、结构和样式的技能,实现更丰富的交互体验。文中还讨论了DOM操作在实际案例、与其他前端技术结合的应用,助你提升前端开发能力。