Vue如何监听元素宽高变化

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

vue监听元素宽高变化

解决方案

1、使用element-resize-detector插件

2、使用自定义指令

element-resize-detector插件

npm install element-resize-detector

自定义指令

<template>
  <transition>
    <div v-resize="DomResize">
    </div>
  </transition>
</template>
<script>
export default {
  directives: {
    resize: {
      // 指令的名称
      bind(el, binding) {
        // el为绑定的元素,binding为绑定给指令的对象
        // console.log(el, '绑定', binding)
        let width = ''
        let height = ''
        function isResize() {
          const style = document.defaultView.getComputedStyle(el)
          if (width !== style.width || height !== style.height) {
            binding.value({ width: style.width, height: style.height }) // 关键(这传入的是函数,所以执行此函数)
          }
          width = style.width
          height = style.height
        }
        el.__vueSetInterval__ = setInterval(isResize, 300)
      },
      unbind(el) {
        // console.log(el, '解绑')
        clearInterval(el.__vueSetInterval__)
      }
    }
  },
  methods:{
    DomResize(data) {
      // const { width, height } = data
      // console.log('width:', width, 'height:', height, '   dom尺寸方式改变')
    }
  }
}
</script>

vue监听元素宽高变化,插件element-resize-detector

安装

npm install element-resize-detector
import elementResizeDetectorMaker from ‘element-resize-detector';
var erd = elementResizeDetectorMaker(); //创建实例

mounted() {
    //监听id为box的元素 重绘echarts
    erd.listenTo(document.getElementById("box"),(element)=>{
        var width = element.offsetWidth;
        var height = element.offsetHeight;
         that.$echarts.init(document.getElementById('xxxx')).resize();
    });
},
beforeDestroy(){
    //离开页面删除检测器和所有侦听器
    erd.uninstall(this.$refs.box); //这里用ref是因为vue离开页面后获取不到dom
}

总结

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

相关文章

  • Vue核心概念Getter的使用方法

    Vue核心概念Getter的使用方法

    今天小编就为大家分享一篇关于Vue核心概念Getter的使用方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • vue实现购物车案例

    vue实现购物车案例

    这篇文章主要为大家详细介绍了vue实现购物车案例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • Vue如何使用cdn加载资源加快打包速度

    Vue如何使用cdn加载资源加快打包速度

    外部的库文件,可以使用CDN资源,或者别的服务器资源等,下面这篇文章主要给大家介绍了关于Vue如何使用cdn加载资源加快打包速度的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • 解决项目vite1.0升级到2.0打包遇到Some chunks are larger问题

    解决项目vite1.0升级到2.0打包遇到Some chunks are larger问题

    本文主要介绍了解决项目vite1.0升级到2.0打包遇到Some chunks are larger问题,文中根据实例编码详细介绍的十分详尽,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 关于vue.extend的使用及说明

    关于vue.extend的使用及说明

    这篇文章主要介绍了关于vue.extend的使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • VUE中常用的4种高级方法

    VUE中常用的4种高级方法

    provide/inject 是 Vue.js 中用于跨组件传递数据的一种高级技术,它可以将数据注入到一个组件中,然后让它的所有子孙组件都可以访问到这个数据,这篇文章主要介绍了VUE中常用的4种高级方法,需要的朋友可以参考下
    2023-05-05
  • vue在页面中如何使用window全局变量

    vue在页面中如何使用window全局变量

    这篇文章主要介绍了vue在页面中如何使用window全局变量问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Vue实现返回顶部按钮实例代码

    Vue实现返回顶部按钮实例代码

    这篇文章主要给大家介绍了关于Vue实现返回顶部按钮的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • 如何隐藏element-ui中tree懒加载叶子节点checkbox(分页懒加载效果)

    如何隐藏element-ui中tree懒加载叶子节点checkbox(分页懒加载效果)

    这篇文章主要介绍了如何隐藏element-ui中tree懒加载叶子节点checkbox(分页懒加载效果),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • vue内点击url下载文件的最佳解决方案分享

    vue内点击url下载文件的最佳解决方案分享

    这篇文章主要给大家介绍了关于vue内点击url下载文件的最佳解决方案,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-02-02

最新评论