监听div的变化,重新渲染Echarts实现自适应

需求:

通过遍历数据渲染多个echarts图表,需要通过监听包裹echarts图表的div大小实现echarts图表的自适应。要实现以上需求我们可以使用 ResizeObserver。ResizeObserver 提供了一种有效地监测 DOM 元素大小变化的方式。以便使用 ResizeObserver 来监听 newDiv 元素的大小变化并在变化时重新渲染图表:

  props.multipleSelection.forEach((element: any,index:any)=> {

                const newDiv = document.createElement('div');
                newDiv.id='chart'+index      
                newDiv.style.width="400px"              
                newDiv.style.height = '300px';
                // 添加draggable属性
                newDiv.draggable = true;
                newDiv.style.backgroundColor="#eee"
                newDiv.style.margin="10px 10px";
                newDiv.style.flex="1";

               
                const chart=document.getElementById('chart'+index)
                const myChart = echarts.init(chart);
                chartInstances.push(myChart);
                myChart.setOption({
                    animationDuration:1000,
                    title: {
                        text:element.labelName
                    },
                    tooltip: {
                        trigger: 'axis',
                        axisPointer: {
                            type: 'cross',
                            label: {
                                backgroundColor: '#6a7985'
                            }
                        }
                    },
                    xAxis: {
                        type: 'category',
                        data: timeLine,
                        name: "时间"
                    },
                    yAxis: {
                        name: '值',
                    },
                    grid: {
                        right: 140,
                    },
                    series: seriesData.value,
                })
                //仅限于window视口发生变化时
                window.addEventListener("resize", function () {
                    myChart.resize();
                });

                const ro = new ResizeObserver((entries) => {
                        myChart.resize();
                    });
                    ro.observe(chart!);
            });
            

 需要为每个图表元素单独创建一个ResizeObserver。

注意我遇到一个问题,因为我把mychart设置成了全局变量,导致所有的 ResizeObserver 共享相同的 myChart 实例,最后只监听到最后一个div的变化,其他没有监听到。

        所以在每次迭代中创建新的 myChart 实例,确保了每个图表元素都有自己的 ECharts 实例,这样就不会相互影响。

实现效果图:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在使用 ECharts 组件的 Vue 项目中,可以通过以下步骤实现 ECharts 图表的高度自适应: 1. 首先,在 Vue 组件中引入 ECharts 库。可以使用 npm 安装 echarts,然后在组件中导入 echarts: ```javascript import echarts from 'echarts'; ``` 2. 在组件的 `mounted` 钩子函数中,创建一个图表实例,并将其挂载到指定的 DOM 元素上: ```javascript mounted() { // 创建图表实例 this.chart = echarts.init(this.$refs.chartContainer); // 渲染图表 this.renderChart(); }, ``` 3. 在 `renderChart` 方法中,根据需要设置图表的配置项和数据,并使用 `setOption` 方法进行渲染: ```javascript methods: { renderChart() { // 设置图表配置项 const option = { // 配置项... }; // 设置图表数据 const data = { // 数据... }; // 使用 setOption 方法渲染图表 this.chart.setOption(option); }, }, ``` 4. 在 Vue 组件的模板中,使用一个容器元素包裹图表,并通过 `ref` 属性引用该元素: ```html <template> <div ref="chartContainer" style="height: 100%"></div> </template> ``` 5. 最后,在组件的 `updated` 钩子函数中,监听窗口大小变化,并在窗口大小变化重新渲染图表: ```javascript updated() { // 监听窗口大小变化 window.addEventListener('resize', this.handleResize); // 在窗口大小变化重新渲染图表 this.chart.resize(); }, methods: { handleResize() { // 在窗口大小变化重新渲染图表 this.chart.resize(); }, }, ``` 通过以上步骤,ECharts 图表的高度将会自适应容器的高度,并会在窗口大小变化时自动调整图表的大小。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值