ECharts图表自适应

1.小节概述

    通过前面的章节,我们已经可以使用Echarts制作柱状图、折线图、饼图、漏斗图、雷达图、仪表盘和地图等常见图表,并重点了解如何使用配置项(option),接下来将了解ECharts中的API在某些场景中的使用,例如图表自适应、图表联动、图表钻取等需求实现。

    自适应是指浏览器窗口发生变化的时候,echarts图表大小能够有相应的适配变化,那么可以通过监听浏览器窗口配合echarts实例(echartsInstance)中的resize方法来实现。在本小节中,主要介绍在当前Vue项目中使用element-resize-detector配合echarts实例中的resize方法实现图表自适应。

2.操作步骤

2.1.准备工作

1.在主页HomeView.vue中,存放文字链接(自适应),点击跳转对应的路由页面,在router的index.js中配置路由信息。

2.在ChartAdapt演示页面中,存放三个图表,可以发现当浏览器缩放时,虽然用了栅格,存放图表的容器自适应了,但是图表溢出并没有自适应。参考代码:

<template>
    <div class="home">
        <el-row>
            <el-col :span="8" class="sideCol">
                <ChartBarTwo></ChartBarTwo>
            </el-col>
            <el-col :span="8">
                <ChartLineTwo></ChartLineTwo>
            </el-col>
            <el-col :span="8" class="sideCol">
                <ChartPieTwo></ChartPieTwo>
            </el-col>
        </el-row>
    </div>
</template>
 
<script>
import ChartBarTwo from '@/components/bar/ChartBarTwo.vue'
import ChartLineTwo from '@/components/line/ChartLineTwo.vue'
import ChartPieTwo from '@/components/pie/ChartPieTwo.vue'

export default {
    name: 'ChartAdapt',
    components: { ChartBarTwo, ChartLineTwo, ChartPieTwo },
}
</script>
 
<style scoped>
.el-row {
    margin-top: 5px;
    height: 410px;
}
.el-button {
    margin-top: 5px;
}
.sideCol {
    padding-left: 6px;
    padding-right: 6px;
}
.chartDiv {
    border: 1px solid;
    height: 410px;
    border-radius: 5px;
    text-align: center;
}
</style>

2.2.集成element-resize-detector

1.VSCode中,新建终端,运行指令下载element-resize-detector依赖,下载完成后可以看到package.json中相关依赖信息。

npm install element-resize-detector

2.在ChartAdapt页面中,可以看到存放了三个图表:一个柱状图(ChartBarTwo),一个折线图(ChartLineTwo),一个饼图(ChartPieTwo)。接下来,将分别处理这3个图表组件,引入element-resize-detector监听元素宽度变化,并配合echarts实例中的resize方法来实现自适应。

2.3.自适应实现

1.在ChartBarTwo组件中,引入element-resize-detector,监听图表容器变化,调用resize方法进行自适应处理。参考代码:

<template>
    <div class="mainDiv">
        <div class="titleDiv">分公司销售量</div>
        <div class="chartDiv" id="chartBarTwo"></div>
    </div>
</template>

<script>
import elementResizeDetectorMaker from 'element-resize-detector'
const erd = elementResizeDetectorMaker()

export default {
    data() {
        return {
            chartData: {},
        }
    },
    name: 'ChartBarTwo',
    mounted() {
        this.getChartData().then(() => {
            // 数据请求到后渲染图表
            this.renderChart()
        })
    },
    methods: {
        // 请求数据回来
        async getChartData() {
            this.chartData = await this.$axios({ url: 'sales' })
        },
        // 渲染图表
        renderChart() {
            let myChart = this.$echarts.init(document.getElementById('chartBarTwo'))
            let chartData = this.chartData
            var option = {
                // 此处option配置省略了,可以代码参考前面小节内容
            }
            // 使用刚指定的配置项和数据显示图表
            myChart.setOption(option)
            // 监听图表所在容器,大小有变化时自适应
            erd.listenTo(document.getElementById('chartBarTwo'), function () {
                myChart.resize()
            })
        },
    },
}
</script>

<style scoped>
</style>

2.在组件ChartLineTwo和ChartPieTwo中采用同样的处理方式,处理后启动项目,访问自适应演示页面,缩放浏览器可以看到图表可以随容器自适应。

3.小节总结

    在使用Echarts绘制图表时,可能会遇到变形的问题。在本小节中,通过使用element-resize-detector监听元素宽度变化的插件,配合echarts实例中的resize方法来实现图表自适应。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值