tab页切换导致echart图宽高仅100px问题

本文介绍了在页面切换或弹框加载时,如何修复ECharts图表的宽高显示问题,包括使用`resize`方法调整图表尺寸,以及针对特定场景如弹框加载异常的解决方案。

页面切换导致echart图宽高仅100px问题,图表的宽度可能没有正确更新,导致显示不正确。为了解决这个问题,你需要确保在切换标签页时触发ECharts实例的resize方法,以便图表可以正确地调整到新的容器尺寸。

// 假设你已经有一个ECharts实例
var myChart = echarts.init(document.getElementById('myChart'));
 
// 假设你有一个函数来处理标签页的切换事件
function handleTabSwitch() {
    // 当标签页切换时,重置ECharts图表的尺寸
    myChart.resize();
}

还有打开弹框或者切换tab页的时候,加载异常。

第一次打开弹框加载异常,第二次打开弹框就加载正常了,这时候只需要再打开弹框的方法调用中加一个nextTick再加载一次echarts:

  this.$nextTick(() => {
              这里调用一下绘制echarts的方法就行了
            });

再或者有一个更简单的方法,适用于窗口宽度不变的时候:

把宽高固定写死,
比如style=”width:500px;height:500px”,这时候echarts有了明确的大小时候就可以正常显示出来了。
但是如果 想要 100%铺满且随屏幕自动适应大小,又无法解决了。。

ECharts 面渲染时宽度设置为 100% 但尺寸有问题,通常是因为面刷新后获取不到 ECharts 的 DOM 元素,或者渲染时 tab 选项卡 display 为 none 导致 width:100% 没有可继承项,也可能是表的盒子使用了 v-show 或 class 隐藏样式,使得初始化时找不到元素。以下是一些解决办法: ### 使用 $nextTick 和 resize 方法 在 Vue + Element 项目中,若遇到 tab 切换选项卡下 ECharts 宽度缩减为 100px问题,可在点击事件里使用 `$nextTick` 确保 DOM 更新后再重新调整表大小。示例代码如下: ```javascript changeGroup1(val) { console.log(val); this.$nextTick(() => { let myChart10 = this.$echarts.init(document.getElementById('main10')); myChart10.resize(); }); } ``` 此方法能保证在 DOM 更新完成后,重新计算并调整 ECharts 表的大小,从而解决宽度显示问题[^2]。 ### 采用 lazy 属性 若使用 ElementUI 的 `el-tabs`,可将 `lazy` 属性设为 `true`,实现标签延迟渲染。同时,首次加载的 `v-if` 或者 `v-show` 设置为 `true`。代码示例如下: ```html <el-tabs lazy="true"> <!-- 标签内容 --> </el-tabs> ``` 这样在标签真正显示时再进行 ECharts 表的初始化,避免因初始状态下元素不可见而导致宽度计算问题[^4]。 ### 替换 v-show 为 v-if 或设置初始值 若 ECharts 所在的 div 使用了 `v-show`,可将其替换为 `v-if`;若不想替换,可将初始值设为 `true`。不过,在频繁显示或不显示的场景下,`v-if` 可能不太适用,此时可在 `v-show` 初始为 `false` 时使用 `resize()` 方法。示例代码如下: ```javascript watch: { show(v) { if (v) { this.$nextTick(() => this.$refs.chart.instance.resize()); } } } ``` 通过监听显示状态的变化,在显示时调用 `resize()` 方法重新调整表大小[^4]。 ### 通过 JS 获取并设置高 通过 JS 获取外层 div 的高,然后将其设置给表容器。示例代码如下: ```javascript let outerDiv = document.getElementById('outerDiv'); let width = outerDiv.offsetWidth; let height = outerDiv.offsetHeight; let myChart = echarts.init(document.getElementById('chart')); myChart.setOption({ // 其他配置项 grid: { left: 0, right: 0, top: 0, bottom: 0, containLabel: true } }); myChart.resize({ width: width, height: height }); ``` 此方法直接获取外层容器的实际高,并将其应用到 ECharts 表上,确保表能正确显示[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LXXgalaxy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值