vue如何监听某个元素的大小变化

 更新时间:2023年10月21日 09:41:12   作者:失落の泪  
这篇文章主要介绍了vue如何监听某个元素的大小变化问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

vue监听某个元素的大小变化

<div class="dialog_wrap"></div>
 console.log(box1.offsetWidth, box1.offsetHeight);
    this.width = box1.offsetWidth; //offsetWidth属性可以返回对象的padding+border+width属性值之和
    this.height = box1.offsetHeight;
    const resizeObserver = new ResizeObserver((entries) => {
      for (let entry of entries) {
        if (entry.target.offsetWidth != this.width) {
        // 打印出entry.target 可以看到此处可以进行元素的各种变化的监听
        //此处直接写监听变化后要处理的逻辑即可
 
           //防抖处理(这里做一些监听变化后的逻辑处理)
          if (this.konvatimer !== null) {
            clearTimeout(this.konvatimer);
          }
          this.konvatimer = setTimeout(() => {
            console.log("变化", entry.target.offsetWidth);
            this.width = entry.target.offsetWidth;
            this.height = entry.target.offsetHeight;
 
            this.layer = Konva.Node.create(this.json, "screenTopo").findOne(
              "Layer"
            );
            this.stage = new Konva.Stage({
              container: "screenTopo",
              width: this.width,
              height: this.height,
            });
            this.stage.add(this.layer);
            this.handleInitKonva();
          }, 100);
        }
        
      }
    });
    resizeObserver.observe(document.querySelector(".dialog_wrap"));
     //observe方法 用于监听指定的 Element 或SVGElement

使用element-resize-detector监听元素大小变化

1、应用场景

底部固定按钮栏使用 position: fixed 固定定位,宽度等于右侧内容栏的宽度,当我们左侧菜单栏收起的时候,其宽度也能够自适应变化。

也就是说底部栏的宽度需要监听其父元素右侧内容的宽度从而实现自适应变化。

2、 解决方法

使用 element-resize-detector

(1)下载

npm i element-resize-detector --save

(2)导入

const elementResizeDetectorMaker = require('element-resize-detector')

(3)使用

// 监听右侧page元素宽度变化,更新底部固定按钮栏宽度
let erd = elementResizeDetectorMaker();
erd.listenTo(document.getElementById('id元素'), (ele) => {
    console.log(ele.clientWidth);
})

3、源码

<template>
    <div class="page" ref="page">
        <div class="page-footer" :style="{'width': footerWidth }">
            <el-button type="primary" @click="handleSubmit">保 存</el-button>
        </div>
    </div>
</template>
 
<script>
    const elementResizeDetectorMaker = require('element-resize-detector')
    export default {
        name: "home",
        data() {
            return {
                footerWidth: "500px" // 底部固定按钮栏宽度
            }
        },
        mounted() {
            // 监听右侧page元素宽度变化,更新底部固定按钮栏宽度
            let erd = elementResizeDetectorMaker();
            erd.listenTo(this.$refs.page, (ele) => {
                this.footerWidth = ele.clientWidth - 32 + "px";
            })
        }
    }
</script> 
 
<style lang="less" scoped>
    .page-footer {
        height: 52px;
        margin: 0 16px;
        border-top: 1px solid #e0e0e0;
        display: flex;
        align-items: center;
        position: fixed;
        bottom: 0;
        z-index: 99;
        background-color: rgba(255, 255, 255, 0.9);
        .el-button {
            height: 32px;
            width: 96px;
            line-height: 32px;
            padding: 0;
            border-radius: 2px;
        }
    }
</style>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue实现五子棋游戏

    vue实现五子棋游戏

    这篇文章主要为大家详细介绍了vue实现五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • Vue3实现密码加密登录的示例代码

    Vue3实现密码加密登录的示例代码

    现在,很多登陆表单都会使用密码加密,为登录安全,登录表单输入密码,会加密后传入后台,本文就来介绍一下Vue3实现密码加密登录的示例代码,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • 详解Vue中的基本语法和常用指令

    详解Vue中的基本语法和常用指令

    Vue.js 是一套构建用户界面的框架,**只关注视图层**,它不仅易于上手,还便于与第三方库或既有项目整合。这篇文章主要介绍了vue 的基本语法和常用指令,需要的朋友可以参考下
    2019-07-07
  • vue组件之间进行传值的方法

    vue组件之间进行传值的方法

    这篇文章主要介绍了vue组件之间进行传值的方法,文章围绕主题展开详细的内容戒杀,具有一定的参考价值,需要的朋友可以参考一下
    2022-09-09
  • vue3组件销毁的具体实现

    vue3组件销毁的具体实现

    组件的销毁意味着从 DOM 中移除该组件,并清除与之相关的所有事件监听器和子组件,本文主要介绍了vue3组件销毁的具体实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-08-08
  • vue车牌输入组件使用方法详解

    vue车牌输入组件使用方法详解

    这篇文章主要为大家详细介绍了vue车牌输入组件的实现方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • 解决Vue.js父组件$on无法监听子组件$emit触发事件的问题

    解决Vue.js父组件$on无法监听子组件$emit触发事件的问题

    今天小编就为大家分享一篇解决Vue.js父组件$on无法监听子组件$emit触发事件的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • vue elementui el-form rules动态验证的实例代码详解

    vue elementui el-form rules动态验证的实例代码详解

    在使用elementUI el-form 中,对于业务不同的时候可能会产生不同表单结构,但是都是存在同一个表单控件el-form中。这篇文章主要介绍了vue elementui el-form rules动态验证的实例代码,需要的朋友可以参考下
    2019-05-05
  • 使用vue cli4.x搭建vue项目的过程详解

    使用vue cli4.x搭建vue项目的过程详解

    这篇文章主要介绍了使用vue cli4.x搭建vue项目的过程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • Vue项目中Element UI组件未注册的问题原因及解决方法

    Vue项目中Element UI组件未注册的问题原因及解决方法

    在 Vue 项目中使用 Element UI 组件库时,开发者可能会遇到一些常见问题,例如组件未正确注册导致的警告或错误,本文将详细探讨这些问题的原因、解决方法,以及如何在需要时撤销相关操作,需要的朋友可以参考下
    2025-01-01

最新评论