1. 前言
很多做pc端平台的小伙伴都遇到过这样一个问题:在做侧边栏菜单时会有一个收缩和展开的一个功能,在伸缩的过程中右边的页面的宽度就会随之改变。我上网查了查 ,也动手试了试 window.onresize = ()=>{}。却不尽人意,因为它只能检测浏览器大小的变化,完全跟我们的需求不沾边。为解决类似此问题,我们可使用 element-resize-detector。
安装及相关文档
npm i element-resize-detector
element-resize-detector npm 地址
注意事项
- 如果元素具有 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>