ECharts 响应式

ECharts 响应式设计详解

ECharts 支持两种主要方式实现响应式(自适应不同屏幕尺寸):

  1. 容器尺寸变化自适应:最常用,通过 myChart.resize() 手动或自动调整图表大小。
  2. 媒体查询(Media Query):类似 CSS @media,针对不同屏幕宽度自动切换 option 配置(如调整图例方向、饼图半径、标题位置等)。

1. 容器自适应(基础响应式)

  • DOM 容器设置 width: 100%; height: 100% 或固定高度 + 宽度 100%。
  • 监听窗口 resize 事件,调用 resize()

示例代码

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8">
    <title>ECharts 容器响应式</title>
    <script src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script>
    <style>
        #main { width: 100%; height: 600px; }  /* 宽度100%,高度固定或vh */
    </style>
</head>
<body>
    <div id="main"></div>
    <script>
        const myChart = echarts.init(document.getElementById('main'));
        myChart.setOption({
            title: { text: '响应式柱状图' },
            xAxis: { data: ['A', 'B', 'C', 'D', 'E'] },
            yAxis: {},
            series: [{ type: 'bar', data: [10, 20, 30, 40, 50] }]
        });

        // 窗口变化时自动调整
        window.addEventListener('resize', () => {
            myChart.resize();
        });
    </script>
</body>
</html>

在 Vue/React 等框架中,也可在组件 resize 时调用 chart.resize()

2. 媒体查询(Media Query)高级响应式

使用 baseOption + media 数组,根据屏幕宽度(maxWidth/minWidth 等)切换配置。

完整示例(小屏幕时图例垂直、饼图变小):

const option = {
    baseOption: {
        title: { text: '响应式饼图' },
        legend: { orient: 'horizontal', left: 'center' },
        series: [{
            type: 'pie',
            radius: '60%',
            center: ['50%', '50%'],
            data: [
                { value: 1048, name: '搜索引擎' },
                { value: 735, name: '直接访问' },
                { value: 580, name: '邮件营销' }
            ]
        }]
    },
    media: [
        {
            query: { maxWidth: 600 },  // 小于等于600px(手机)
            option: {
                legend: { orient: 'vertical', left: 'left', top: 'center' },
                series: [{ radius: '50%', center: ['50%', '50%'] }]
            }
        },
        {
            option: {  // 默认大屏幕配置(可选)
                legend: { orient: 'horizontal' },
                series: [{ radius: '70%' }]
            }
        }
    ]
};
myChart.setOption(option);

注意

  • media 中的 option 是“原子”配置,只覆盖指定项。
  • 推荐结合 resize() 使用,实现完美响应式。
  • query 支持 maxWidth、minWidth、maxHeight 等。

官方文档(最新版):

  • 响应式容器:https://echarts.apache.org/handbook/zh/concepts/chart-size/
  • Media Query:https://echarts.apache.org/zh/option.html#media

如果你需要特定场景(如移动端折叠图例、多图联动响应式)的完整代码,告诉我,我可以进一步定制!

文章已创建 3420

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部