Echarts绘制完图表之后更改图表宽度

该文章介绍了一个使用Echarts绘制图表的Vue项目,其中详细说明了如何在点击按钮后隐藏左侧内容,使右侧的Echarts图表全屏显示。代码示例展示了如何通过调整Vue的列布局以及使用Echarts的resize方法实现图表的动态适应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


在这里插入图片描述

1. 效果展示

在这里插入图片描述

2. 需求说明

Echarts绘制完图表之后,需要隐藏左边的内容,并且使右边的Echarts图表全屏显示

3. 项目代码

<template>
    <div>
        <v-row>
            <v-col :cols="coks" v-if="showBtn">
                1234
            </v-col>
            <v-col :cols="12 - coks">
                <div id="chart" style="width: 100%; height: 400px"></div>
            </v-col>
        </v-row>
        <v-btn @click="showBtnMethod">隐藏</v-btn>
    </div>
</template>

<script>
import * as echarts from "echarts";
var chartDom, myChart, option = null
export default {
    data() {
        return {
            coks: 6,
            showBtn: true
        }
    },
    mounted() {
        let _this = this;
        window.onresize = function () {  // 核心代码
            myChart.resize();
        };
        this.huizhi()
    },
    methods: {
        showBtnMethod() {
            this.showBtn = !this.showBtn
            if (this.showBtn) {
                this.coks = 6
            } else {
                this.coks = 0
            }
            this.$nextTick(() => {
                myChart.resize();
            })
        },
        huizhi() {
            chartDom = document.getElementById('chart');
            myChart = echarts.init(chartDom);
            option = {
                xAxis: {
                    type: 'category',
                    data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
                },
                yAxis: {
                    type: 'value'
                },
                series: [
                    {
                        data: [150, 230, 224, 218, 135, 147, 260],
                        type: 'line'
                    }
                ],
                toolbox: {
                    show: true,  //show为显示工具栏
                    feature: { //feature里面放的是工具栏元素
                        dataZoom: {  // 控制图表的区域放大  需要鼠标拖拽  
                            yAxisIndex: "none"  // yAxisIndex  代表横向放大
                            //xAxisIndex: "none" // xAxisIndex  代表纵向放大
                        },
                        dataView: { // dataView 
                            readOnly: false  // readOnly为是否为不可编辑只读状态  true为只读   false为可编辑
                        },
                        magicType: { //magicType 为动态类型切换 
                            type: ["line", "bar"]   //type为需要切换的类型集合
                        },
                        restore: {},  // restore为还原按钮
                        saveAsImage: {}  // saveAsImage下载图片
                    }
                },
            };
            myChart.setOption(option);
        }
    }
}
</script>
### 修改 ECharts 图表宽度的方法 当使用 ECharts 绘制图表时,如果希望调整其宽度以实现更好的布局效果或响应式设计,可以通过多种方式来成这一目标。以下是几种常见的方法及其具体实现: #### 方法一:通过 CSS 设置父容器宽度并调用 `resize` 方法 ECharts 初始化时会根据父容器的尺寸自动设置图表大小。因此,确保父容器具有正确的宽度是非常重要的。如果父容器初始状态为隐藏(如 `display: none`),则可能导致 ECharts 无法正确计算宽度[^2]。 - **HTML 结构** ```html <div id="chartContainer" style="width: 100%; height: 400px;"> <div id="myChart" style="width: 100%; height: 100%;"></div> </div> ``` - **JavaScript 实现** ```javascript let chartDom = document.getElementById('myChart'); let myChart = echarts.init(chartDom); // 配置项 let option = { title: { text: '示例图表' }, tooltip: {}, xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] }, yAxis: { type: 'value' }, series: [{ data: [820, 932, 901, 934, 1290, 1330, 1320], type: 'line' }] }; myChart.setOption(option); // 自动调整图表大小 window.addEventListener('resize', function () { myChart.resize(); }); ``` 此方法适用于动态改变窗口大小的情况,能够实时更新图表宽度[^3]。 --- #### 方法二:显式设置图表 DOM 的宽度 有时可能需要手动指定图表的具体宽度,而不是依赖于父容器的百分比宽度。这可以通过 JavaScript 动态修改样式属性实现。 - **HTML 结构** ```html <div id="chartContainer"> <div id="myChart"></div> </div> ``` - **JavaScript 实现** ```javascript let chartWidth = window.innerWidth * 0.8; // 假设占屏幕宽度的 80% document.getElementById('myChart').style.width = `${chartWidth}px`; let chartDom = document.getElementById('myChart'); let myChart = echarts.init(chartDom); myChart.setOption({ // ...其他配置选项... }); // 如果需要支持窗口缩放,则重新设置宽度 window.addEventListener('resize', function () { let newWidth = window.innerWidth * 0.8; document.getElementById('myChart').style.width = `${newWidth}px`; myChart.resize(); }); ``` 这种方法适合在特定场景下精确控制图表宽度[^4]。 --- #### 方法三:Vue.js 或 React 环境中的自适应方案 在现代前端框架中开发时,通常会在组件生命周期钩子函数中处理图表初始化和重绘操作。 - **Vue.js 示例** ```vue <template> <div ref="chartContainer" class="chart-container"> <div :id="'myChart'" class="chart"></div> </div> </template> <script> import * as echarts from 'echarts'; export default { data() { return { chartInstance: null, }; }, mounted() { this.chartInstance = echarts.init(this.$refs.chartContainer.querySelector('.chart')); this.chartInstance.setOption({ // ...配置项... }); this.$nextTick(() => { this.chartInstance.resize(); }); window.addEventListener('resize', this.handleResize); }, beforeDestroy() { window.removeEventListener('resize', this.handleResize); if (this.chartInstance) { this.chartInstance.dispose(); } }, methods: { handleResize() { if (this.chartInstance) { this.chartInstance.resize(); } } } }; </script> <style scoped> .chart-container { width: 100%; height: 400px; } .chart { width: 100%; height: 100%; } </style> ``` 该方法利用 Vue 生命周期管理图表实例,在页面加载成后立即触发一次 `resize` 并监听窗口变化事件。 --- #### 总结 以上三种方法分别针对不同需求提供了灵活的解决方案: - 使用纯 HTML 和 JavaScript 可快速实现基础功能; - 手动设定宽度可满足特殊业务逻辑下的精准控制; - 在现代化框架中集成 ECharts 则需结合框架特性优化性能与用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Monly21

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

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

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

打赏作者

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

抵扣说明:

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

余额充值