赞
踩
很多做pc端平台的小伙伴都遇到过这样一个问题:在做侧边栏菜单时会有一个收缩和展开的一个功能,在伸缩的过程中右边的页面的宽度就会随之改变。我上网查了查 ,也动手试了试 window.onresize = ()=>{}。却不尽人意,因为它只能检测浏览器大小的变化,完全跟我们的需求不沾边。为解决类似此问题,我们可使用 element-resize-detector。
npm i element-resize-detector
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 事件调用此函数。 |
注意事项
// main.js (组件中按需引入方式,见2.使用方法中代码)
import ElementResizeDetectorMaker from "element-resize-detector";
Vue.prototype.$erd = ElementResizeDetectorMaker();
<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>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。