echarts莫名缩小,并且宽度不能更改,生成时默认宽度

本文描述了一种在使用 ECharts 时遇到的问题及其解决方案。问题表现为图表无法正确显示,原因是 ECharts 初始化时机不当,发生在 DOM 节点被隐藏之后。通过调整初始化顺序并在 DOM 显示后再进行初始化,成功解决了这一问题。

遇到问题的时候,百度了一些,没找到解决方法,知乎上有同样的问题,但是解决方法不适用,最后在前端老哥的帮助下解决了问题。

先贴一些问题图:
正常情况
这里写图片描述

加了div隐藏后
这里写图片描述

我出现这个问题的原因是,echarts初始化的顺序在div隐藏之后,所以当echarts初始化时找不到div,只能将echarts设置为默认值

    //echarts初始化
    window.myLine = echarts.init(document.getElementById('line-chartOne'));
    window.myLine2 = echarts.init(document.getElementById('line-chart-sku'));
    window.myLine3 = echarts.init(document.getElementById('line-chart-shelves'));
    window.myLine4 = echarts.init(document.getElementById('line-chart-compare'));


    $('#part2').hide();
    $('#partright').hide();
    $('#partleft').show();

这是改动后的代码,小问题,希望看到的人,你的问题也能解决。

欢迎关注我的微博@住街对面的查理,我的生活很有趣,你要不要来看一看。

ECharts 中,柱状图的柱子宽度可以通过 `barWidth` 属性进行设置。该属性可以接受绝对值(如 `40`)或百分比(如 `'60%'`),用于控制柱子的宽度[^3]。 ### 获取柱子宽度的方式 ECharts 并未直接提供 API 来获取柱状图生成后的柱子实际宽度。但可以通过以下方式间接获取: 1. **通过配置项设定固定宽度** 如果设置了固定的 `barWidth` 值,可以直接从配置中读取该值作为柱子的实际宽度。 ```javascript option = { series: [{ type: 'bar', barWidth: 20, // 固定宽度为 20px data: [120, 200, 150, 80, 70] }] }; ``` 2. **通过图表实例计算实际宽度** 在图表渲染完成后,可以通过访问 ECharts 实例中的 `series` 数据结构来获取当前渲染的柱子信息,并结合坐标系宽度和类目数量进行计算。 示例代码如下: ```javascript const chart = echarts.getInstanceByDom(document.getElementById('chart')); const series = chart.getModel().option.series[0]; const xAxisData = chart.getModel().option.xAxis.data; const barWidth = series.barWidth || Math.floor(chart.getWidth() / xAxisData.length * 0.6); // 默认按比例计算 console.log(`柱子宽度为:${barWidth}px`); ``` 3. **响应式宽度(基于百分比)** 如果使用了百分比形式的 `barWidth`,则其最终宽度会基于每个类目的宽度进行计算。例如,`'60%'` 表示柱子宽度为类目宽度的 60%。 示例: ```javascript option = { series: [{ type: 'bar', barWidth: '60%', // 柱子宽度为类目宽度的 60% data: [120, 200, 150, 80, 70] }] }; ``` ### 注意事项 - 若未显式设置 `barWidth`,则柱子宽度将由 ECharts 自动计算,通常基于类目数量和图表容器的宽度。 - 在多个柱状图系列共存的情况下,`barWidth` 将影响所有共享同一坐标系的柱状图系列[^3]。 ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值