解决echarts设置100%但只有100px的问题

摘要:具体问题是,设置echarts宽度width为100%,结果出来的时候就变成了100px;这种情况一般都是 echarts所在的div一开始是display:none,在一开始初始化执行js的时候找不到这个元素

问题描述

具体问题是,设置echarts宽度width为100%,结果出来的时候就变成了100px;这种情况一般都是 echarts所在的父容器一开始是display:none,在一开始初始化执行js的时候找不到这个元素,所以会出现问题。


解决方案

一开始就把echatrs的的宽度定死,监听浏览器大小变化,把echerts用div包裹起来,每当浏览器发生变化,拿到div的值,并赋值给echerts这个id。

示例:

首先,我们要获取到echarts图表标签元素,设置初始宽度。我使用的是 window.innerWidth - 200 + “px”;可以根据自己的需求,设置相应的宽度。

window.addEventListener 主要是为了实现宽度自适应,会根据浏览器窗口的变化,来自动改变图表宽度。示例代码如下:

const statInfo = this.statInfos.nativeElement; // 获取图表元素
statInfo.style.width = window.innerWidth - 200 + "px"; //初始化echarts图表宽度
const myChart = echarts.init(statInfo);
// 设置宽度自适应
window.addEventListener('resize', () => {
statInfo.style.width = window.innerWidth - 200 + "px";
myChart.resize();
});

elementUI的el-tabs下使用

如果用的是elementUI,超简单解决办法:

1、el-tabs 有一个属性:lazy,表示标签是否延迟渲染。 设为true,延时加载即可。

2、首次加载的v-if或者v-show设置为true。

3、所在div用了v-show,这种情况要不换成v-if,要不就设置初始值是true。换成v-if可行,但在频繁显示或不显示的时候不适用v-if,所以在试用v-show且初始为false的时候,可以使用resize()。

watch:{
show(v){
// 在show为true,也就是显示的时候,调用resize 解决100px的问题
if(v){
this.$nextTick(() => this.$refs.chart.instance.resize())
}
}
}


本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://shenqiku.cn/article/FLY_11945