【Vue】监听div宽高的变化(动态渲染echarts宽高案例)

在Vue.js中,要监听一个div元素的宽度和高度的变化,你可以使用ResizeObserverResizeObserver是一个现代的JavaScript API,它允许你监听元素的大小变化。以下是一个简单的Vue组件示例,演示如何使用ResizeObserver监听div宽高的变化:

<template>
  <div ref="resizeTarget" class="resize-target">
    <!-- Your content goes here -->
  </div>
</template>

<script>
export default {
     
  mounted() {
     
    // 获取要监听的 div 元素
    const resizeTarget = this.$refs.resizeTarget;

    // 创建 ResizeObserver 实例
    const resizeObserver = new ResizeObserver(entries => {
     
      // entries 是一个 ResizeObserverEntry 对象数组,包含目标元素的大小信息
      for (const entry of entries) {
     
        // 获取宽度和高度
        const {
      width, height } = entry.contentRect;
        console.log('Width:', width, 'Height:', height);

        // 在这里可以触发自定义的处理逻辑,例如将宽高信息传递给 Vue 组件的方法
        this.handleResize(width, height);
      }
    });

    // 开始监听目标元素的大小变化
    resizeObserver.observe(resizeTarget);

    // 在组件销毁时停止监听,防止内存泄漏
    this.$once('hook:beforeDestroy', () => {
     
      resizeObserver.disconnect();
    });
  },

  methods: {
     
    handleResize(width, height) {
     
      // 在这里可以执行你想要的操作,比如更新组件的状态
      // 例如:this.$emit('resize', { width, height });
    }
  }
};
</script>

<style>
.resize-target {
     
  /* 设置一些样式,使 div 元素可见 */
  width: 100%;
  height: 100%;
  border: 1px solid #ccc;
  box-sizing: border-box;
  overflow: hidden;
}
</style>

在这个例子中,我们使用mounted生命周期钩子来获取目标div元素的引用,并创建了一个ResizeObserver实例。在ResizeObserver的回调函数中,我们可以获取目标元素的新宽度和高度,并在handleResize方法中进行自定义处理。最后,确保在组件销毁时停止观察,以防止内存泄漏。

这在echarts中自适应宽高动态响应渲染echarts图表很有意义,如下:

<template>
  <div ref="resizeTarget" class="echart-box">
    <div ref="echart"></div>
  </div>
</template>
mounted () {
   
  this.initEchart()
},
methods: {
   
	initEchart () {
   
	  this.myChart = this.$echarts.init(this.$refs.echart);
	
	  const resizeObserver = new ResizeObserver(entries => {
   
	    // entries 是一个 ResizeObserverEntry 对象数组,包含目标元素的大小信息
	    for (const entry of entries) {
   
	      const {
    width, height } = entry.contentRect;
	      // 根据外部盒子的宽度来设置echarts图的宽度
	      this.myChart.resize({
    width, height });
	    }
	  });
	
	  // 开始监听最外层的 resizeTarget 元素的大小变化
	  const resizeTarget = this.$refs.resizeTarget;
	  resizeObserver.observe(resizeTarget);
	
	  // 在组件销毁时停止监听,防止内存泄漏
	  this.$once('hook:beforeDestroy', () => {
   
	    resizeObserver.disconnect();
	  });
	},
}
<style scoped>
.echart-box {
     
  height: 100%;
  width: 100%;
  overflow: auto;
}
</style>

相关推荐

  1. Vue监听div变化动态渲染echarts

    2024-01-24 12:02:07       14 阅读
  2. vue3监听div变化自定义分析

    2024-01-24 12:02:07       10 阅读
  3. css less sass 动态

    2024-01-24 12:02:07       34 阅读
  4. 新鼠标

    2024-01-24 12:02:07       25 阅读
  5. CSS设置元素

    2024-01-24 12:02:07       16 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-24 12:02:07       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-24 12:02:07       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-24 12:02:07       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-24 12:02:07       20 阅读

热门阅读

  1. 基于easyswoole开发的聊天室

    2024-01-24 12:02:07       32 阅读
  2. 【Docker】Docker学习⑥ - 网络部分

    2024-01-24 12:02:07       25 阅读
  3. leetcode-相交链表

    2024-01-24 12:02:07       37 阅读
  4. tomcat、mysql连接数配置

    2024-01-24 12:02:07       29 阅读
  5. 05-使用结构体构建相关数据

    2024-01-24 12:02:07       27 阅读
  6. 2024最新版 Xmind for Windows下载安装教程

    2024-01-24 12:02:07       55 阅读
  7. Matlab神经网络

    2024-01-24 12:02:07       38 阅读
  8. 【Python实现进行图像文本识别】

    2024-01-24 12:02:07       38 阅读
  9. transformer beginner

    2024-01-24 12:02:07       35 阅读