echarts实现图表响应式改变大小,随浏览器宽度变化


需求分析

两个echarts图表并排,当浏览器宽度发生变化时,图表动态变化,当宽度很小容纳不下两张表时,切换成上下排布


提示:以下是本篇文章正文内容,下面案例可供参考

一、效果展示

缩小后图能正常显示和使用
在这里插入图片描述

二、步骤

1.引入echarts库

这里引入的是本地文件

<script src="echarts.js"></script>

2.随便画两张图片

在echarst库中随便选了两张图。官网链接
在这里插入图片描述
在这里插入图片描述

3.布局

(1)一个父元素div,两个div子元素作图的容器

<div id="echarts">
	<div id="first">1</div>
	<div id="second">2</div>
</div>

(2)css(使用百分比宽度)

百分比能让容器随浏览器大小改变;使用媒体查询检测浏览器大小,957px是图最大的尺寸。
浏览器宽度小于957px时,把图片宽度改957px,这时图片一行放不下自动换行。变成上下布局

#echarts{
	display: flex;
	flex-wrap:wrap;
	width: 100%;
	justify-content:space-around;
}
#first{
	width: 48%;
	height: 600px;
	display: inline-block; 
	box-shadow: 1px 1px 10px #888888;
	border-radius: 30px;   
	margin-top: 20px;
}
#second{
	width: 48%;
	height: 600px;
	display: inline-block;  
	border-radius: 30px;   
	box-shadow: 1px 1px 10px #888888;  
	margin-top: 20px;
}
@media screen and (max-width:957px){
	#first{
		width: 957px;
	}
	#second{
		width: 957px;
	}
}

(3)js监测浏览器宽度,重新绘图

两个echarts图根据当前容器大小重新渲染图

//动态修改图大小
window.onresize = function() {
	myChart1.resize();
	myChart.resize();
};

三、完整代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Echarts响应式</title>
    <script src="echarts.js"></script>
    <style>
        #echarts{
            display: flex;
            flex-wrap:wrap;
            width: 100%;
            justify-content:space-around;
        }
        #first{
            width: 48%;
            height: 600px;
            display: inline-block; 
            box-shadow: 1px 1px 10px #888888;
            border-radius: 30px;   
            margin-top: 20px;
        }
        #second{
            width: 48%;
            height: 600px;
            display: inline-block;  
            border-radius: 30px;   
            box-shadow: 1px 1px 10px #888888;  
            margin-top: 20px;
        }
        @media screen and (max-width:957px){
            #first{
                width: 957px;
            }
            #second{
                width: 957px;
            }
        }
    </style>
</head>
<body>
    <div id="echarts">
        <div id="first">1</div>
        <div id="second">2</div>
    </div>

    <script>
        //动态修改图大小
        window.onresize = function() {
            myChart1.resize();
            myChart.resize();
        };
        var chartDom = document.getElementById('first');
        var myChart = echarts.init(chartDom);
        var option;

        option = {
        tooltip: {
            trigger: 'item'
        },
        legend: {
            top: '5%',
            left: 'center'
        },
        series: [
            {
            name: 'Access From',
            type: 'pie',
            radius: ['40%', '70%'],
            avoidLabelOverlap: false,
            itemStyle: {
                borderRadius: 10,
                borderColor: '#fff',
                borderWidth: 2
            },
            label: {
                show: false,
                position: 'center'
            },
            emphasis: {
                label: {
                show: true,
                fontSize: '40',
                fontWeight: 'bold'
                }
            },
            labelLine: {
                show: false
            },
            data: [
                { value: 1048, name: 'Search Engine' },
                { value: 735, name: 'Direct' },
                { value: 580, name: 'Email' },
                { value: 484, name: 'Union Ads' },
                { value: 300, name: 'Video Ads' }
            ]
            }
        ]
        };
        option && myChart.setOption(option);

        var chartDom = document.getElementById('second');
        var myChart1 = echarts.init(chartDom);
        var option;

        option = {
        xAxis: {
            type: 'category',
            boundaryGap: false,
            data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
        },
        yAxis: {
            type: 'value'
        },
        series: [
            {
            data: [820, 932, 901, 934, 1290, 1330, 1320],
            type: 'line',
            areaStyle: {}
            }
        ]
        };

        option && myChart1.setOption(option);

    </script>
</body>
</html>

四、可能遇到的问题

如果页面有切换器,点击切换图时,需要使用myChart.resize();重新绘制一下图

  • 11
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
Echarts 是一款优秀的开源图表库,支持多种类型的图表和丰富的交互功能。实现 Echarts 图表响应式布局可以通过以下方式: 1. 使用百分比布局 在 Echarts 图表的容器元素中,可以使用百分比来设置宽度和高度,例如: ```html <div id="chart-container" style="width: 100%; height: 100%;"></div> ``` 这样设置可以使图表容器随着父元素的大小变化而自适应调整大小。 2. 监听窗口大小变化 可以通过监听窗口大小变化的事件,动态调整图表容器的大小,从而实现响应式布局。例如: ```javascript var myChart = echarts.init(document.getElementById('chart-container')); function resizeChart() { myChart.resize(); } window.addEventListener('resize', resizeChart); ``` 以上代码中,使用 `echarts.init` 方法初始化图表,并定义了一个 `resizeChart` 函数用于调整图表大小。然后,通过监听窗口的 `resize` 事件,调用 `resizeChart` 函数实现图表容器的大小调整。 3. 使用 Echarts响应式配置项 Echarts 提供了一些响应式配置项,可以根据不同的屏幕大小或容器大小,自动调整图表的样式和布局。例如: ```javascript option = { // 响应式配置项 responsive: { // 在宽度小于 600 时,自动将 legend 放在底部 600: { legend: { orient: 'horizontal', bottom: 0, itemGap: 10 } }, // 在宽度大于等于 600 时,自动将 legend 放在右侧 1200: { legend: { orient: 'vertical', right: 0, top: 0, itemGap: 20 } } }, // 其他图表配置项 ... }; ``` 以上代码中,使用 `responsive` 配置项定义了两个屏幕宽度阈值:`600` 和 `1200`,分别对应屏幕宽度小于 600 和大于等于 600 时的图表样式。在每个阈值中,可以配置需要自动调整的图表组件的样式和位置等参数。 以上是实现 Echarts 图表响应式布局的一些方法,可以根据实际需求选择合适的方式。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

holden.lee

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

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

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

打赏作者

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

抵扣说明:

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

余额充值