容器改变/窗口改变重新渲染echarts

是否遇见使用侧边栏菜单收缩/展开,echarts容器大小变化,但是echarts不重新自适应容器。或者,window窗口改变但是echarts不随着改变,针对这两种echarts不自适应的情况,分享下自己处理方法。

方法核心是:监听使echarts容器大小发生变化的因素及window窗口改变去调用echarts实例的resize()方法。(方法以VUE框架代码为示例)

一:为什么不能自适应:

    ECharts没有绑定resize事件,显示区域大小发生改变内部并不知道,在容器大小发生改变时需要手动调用resize达到自适应的效果。

二:echarts容器大小改变,重新渲染。

处理思路:侧边栏菜单使用elementUI的导航菜单实现,收缩/展开是根据collapse的boolean值,所以我们把collapse属性值getSidebarFold放到vuex,监听getSidebarFold值的变化去调用echarts实例的resize()方法。

computed: {
    ...mapGetters({
      getSidebarFold: ‘getSidebarFold‘
    })
  },
  watch: {
 /* 监听getSidebarFold变化,解决echarts容器变化,重新渲染 setTimeout时间必须设置,且不能太短 */
    getSidebarFold () {
      setTimeout(() => {
        this.resizeHandle()
      }, 500)
    }

  },
  mounted () {
    this.bar = echarts.init(this.$refs.bar)
    this.bar.setOption(this.barOption)

    this.line = echarts.init(this.$refs.line)
    this.line.setOption(this.lineOption)
  },
  methods: {
    resizeHandle () {
      this.bar.resize()
      this.line.resize()
    }
  }

三:window窗口大小改变,重新渲染echarts。

处理思路:监听window窗口变化,调用resize(),并在组件销毁时,清理掉监听。

   mounted () {
    this.bar = echarts.init(this.$refs.bar)
    this.bar.setOption(this.barOption)

    this.line = echarts.init(this.$refs.line)
    this.line.setOption(this.lineOption)
    /* 窗口变化时自适应 步骤一:监听窗口变化 */
    window.addEventListener(‘resize‘, this.resizeHandle)
  },
  destroyed () {
    /* 窗口变化时自适应 步骤三 组件被注销时,缩放函数是匿名函数,且仍然在事件监听列表中,
    因此匿名函数和匿名函数中用到的外部变量在组件注销后均不会被清理。
     所以要手动清理 */
    window.removeEventListener(‘resize‘, this.resizeHandle)
  },
  methods: {
    /* 窗口变化时自适应 步骤二 调用echart的 resize() */
    resizeHandle () {
      this.bar.resize()
      this.line.resize()
    }
  }

原文地址:https://www.cnblogs.com/liangsf/p/11514491.html

时间: 2024-10-09 22:21:55

容器改变/窗口改变重新渲染echarts的相关文章

Docker容器是否可以改变世界?

Docker容器是否可以改变世界? 2016-01-15 杜亦舒 2016年了,很多大牛开始预测技术趋势,其中一个普遍的观点我也很认同: Docker会更加流行,会改变程序世界 2015年的上半年我接触了Docker,熟悉之后,真有一点震惊的感觉,太方便了,可以解决很多问题 Container 通常翻译为容器,但还有另一个意思,就是"集装箱" 集装箱是21世纪最伟大的发明之一,它改变了世界货物运输体系,造就了一个高度自动化.标准化.低成本的物流体系,促进了经济的全球化发展 程序界也出现

MFC控件随对话框大小改变而改变

这也是我项目中碰到的问题,要让对话框中的控件随着对话框大小的变化进行自动调整,一般的做法是在WM_SIZE的响应函数中对所有的控件用MoveWindow()或者SetWindowPos()设置其变化比例. 但是由于需要自己计算,并且还有各种系统引起的情况,比如WIN7里有个选项"拖动时显示窗口内容",选中与不选中导致对话框内容显示完全不一样,选中时错误,不选正确,确实让人头大. 如EasySize是一个很好解决方案,用一些宏封装了内部的实现机制,使用起来方便快捷.原文地址:http:/

delphi实现窗体组建随窗体大小改变而改变

在网上查了许多资料去论述如何在dephi中去实现组件随窗口大小的变化而变化,然都不尽如人意.有人说用组件的align + anchors 这两个属性去控制,但是我用了之后,让我大惊失色.把anchors属性下面的四个值都变为true.如果用户用鼠标去拖动窗口,那么窗口上的组件像是中了夺命书生的面目全非脚一样,基本上就没有所谓的五官之态. 下面就介绍我的方法,同样本人的方法也是看了网友们的资料才得以完成的. (1) 下载TFormResizer组件 我用的是第三方插件TFormResizer,首先

方框列数随着浏览器宽度改变而改变的几种方法

方框列数随着浏览器宽度改变而改变的几种方法 一,使用浮动float <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>考察浮动</title> <style type="text/css"> #content { background-color: red; position

winform中,如何控制控件位置随窗体的大小改变而改变

winform中,如何控制控件位置随窗体的大小改变而改变 有如下3种方法: 方法1 [csharp] view plaincopy using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace MarkPrint

App字体大小不随系统改变而改变

转载请注明出处:http://www.cnblogs.com/cnwutianhao/p/6713724.html 在 "设置" , "显示" , "字体大小" 里面我们可以设置系统字体大小 App界面字体,如果被修改之后,可能就达不到理想状态的效果,界面布局就发生了变化. 未修改过的效果(测试机型:Nexus 5): 正常 小 超大    修改之后的效果(测试机型:Nexus 5): 正常 小 超大    我们从这两组对比图中可以直观的看到修改

轮播图片如何随着窗口的大小改变而改变

调整窗口大小会触发一个onresize 事件,在该事件中写上关于调整轮播图片的js 如下例子: <html> <body onresize="alert('你已经改变了窗体的大小')"> <p>试着改变窗体的大小</p> </body> </html>

openGL如何在改变窗口大小时,使自己的图形不被拉伸

这里要注意两个概念:视口和视景体,当视口的纵横比和视景体的纵横比相同的时候,改变窗口大小,图像才不会变形: 视景体是指成像景物所在空间的集合.它是一个空间集合体. 单个的视景体,比如一个球体,若要完全显示,其视景体应该是该球体的最小外接立方体:若要只显示上半部分,则取上半球,其视景体是上半球的最小外接立方体.对于半球而言,上半球是视景体,那么其只有上半球有显示权限,下半球没有,所以就算是将该球体位置拉远,也只能看到上半球. 若视景体仅仅为上半球,那么默认情况下,上半球所映射的画布刚好充满摄像机.

如何修改容器时间而不改变宿主机时间?

需求 有时候需要测试业务程序,把时间指定到一个特定的时间去测试,如何在修改容器时间而不影响宿主机时间? 解决方法 GitHub 有一个开源的 libfaketime 项目,能解决这个问题.目前该项目有 1.3k Star. 项目地址 https://github.com/wolfcw/libfaketime 支持平台 Linux MacOs 安装 注意:必须 sudo make install,否则 libfaketime.dylib.1 没有运行权限,默认安装到 /usr/local/bin/