解决Echarts设置宽度为100%发现宽度变为100px的问题(Echarts图标宽度自适应问题)

简介:

有的时候我们为了让Echarts自适应容器宽度,把Echarts容器宽度设置为100%,使容器宽度变化的时候,图表宽度也跟着变化。但是我们发现容器宽度变化的时候,图表宽度并不会跟着变化。

今天我就遇到了一个Echarts宽度设置100%导致的Bug,最后通过分析解决了这个Bug。

问题发现:

我的Echart图表内嵌在elementUI的标签页里面(el-tabs),页面结构如下:

游戏设置是页面默认的tab

但是点击全局统计加载图表,发现图表的宽度不符合预期

分析:

在el-tabs中tab是通过display:none来实现切换的

所以第一次加载游戏设置(tab),全局统计(tab)的content被设置了display:none,content里面所有元素的宽高为0,那么由于图表容器设置了width:100%,这个时候图表容器宽高也是0,但是因为echart图标宽高最小为100px,这个时候echart图表宽高为100px。

当我们点击全局统计(tab)的时候,由于Echart图标只会初始化一次,当第一次加载游戏设置(tab)的时候已经被初始化了,所以这个时候,虽然全局统计的display:none效果消失,图表容器width:100%起作用的时候,echart图表宽高仍然为100px。

解决:

既然当图表容器大小发生变化的时候echart检测不到,所以我们对容器设置一个监听器怎么样?当容器大小变化的时候自动调整图表不就解决了?

由于在系统中我的窗口大小不会变化,但是某些DOM元素的大小是变化的于是我没有使用window.addEvenListen('resize',function)这个办法,这个事件监听器不能监听某些DOM元素大小的变化。

我用了ResizeObserver这个API,来监听容器大小变化,然后Resize图表。

这边之所以用比例,而不是用px来比较是因为,不同的电脑分辨率不同,将来可能会无法触发Resize。

最终效果如下

相关推荐
小码哥_常1 小时前
一套自己部署的 IM,客户端是同一份 Flutter
前端·后端
蜗牛攻城狮3 小时前
微前端四大方案选型对比与最佳实践:qiankun、micro-app、wujie、Module Federation
前端·微前端·qiankun·前端架构·micro-app·wujie
她说可以呀4 小时前
Vue插槽
前端·javascript·vue.js
qq_448011165 小时前
Vue + Jinja2两套模版与法冲突造成undefinedError
前端·javascript·vue.js
aixingpan5 小时前
aixingpan.cn API开发文档:前端查询夏令时和时区接口指南
前端·php
2601_958352905 小时前
23.5×19mm 换掉一整条音频链?|A-68 集成了什么:ADC / DAC / 24.576MHz 时钟 / AEC / 波束降噪,主控仅需 6 根线
前端·音视频·ai降噪·回声消除·语音模块
志尊宝6 小时前
AI原生前端开发(039):AI辅助的Nuxt 4全栈开发
前端·vue.js·ai-native
FRing037 小时前
JavaScript入门到精通三十二(深拷贝、浅拷贝、递归函数)
开发语言·前端·javascript
excel7 小时前
双 Token 与前端使用 Crypto 公私钥鉴权换 Token,哪种方案更好?
前端·后端
外收内放7 小时前
Python基础语法练习题(73)
java·前端·python