当前位置: 首页 > news >正文

实现 ECharts 图表自适应

数据可视化的需求越来越多,图表自动生成技术也日渐成熟

ECharts

ECharts 的功能十分强大,可以生成多种形式的图表,配置项十分灵活,可以根据实际需求自由定制
官方文档: https://www.echartsjs.com/examples/

但是ECharts绘制图表时无法获取到clientWidth,而 parseInt(stl.width, 10)) 将width: 100%;转为100,所以计算出的图表宽度为100px 

所以设置width:100%对echarts是不起作用的 

解决方法

思路:mounted时获取window对象的宽高,结合实际需要对window的宽高进行计算,然后将宽高经过计算赋给需要渲染图表的DOM节点,这样一来echarts节点渲染之前就获得了具体的宽高,大小就可以适应不同的屏幕了。

具体实现函数如下:

<template>
 <div id="main" ref="mychart"></div>
</template>
<script>
export default {
 mounted: function () {
            this.loadBugChart();
 },
 methods: {
  loadBugChart() {
                var domBugChart= this.$refs.mychart; //获取DOM节点
                //自适应宽高
                var bugChartContainer = function () {
                    if (domBugChart) {
                        domBugChart.style.width = 66+"vw";
                        domBugChart.style.height = 70+"vh";
                        // 相当于
                        // domBugChart.style.width = window.innerWidth * 0.66 + 'px';
                        // domBugChart.style.height = window.innerHeight * 0.7 + 'px';
                    }

                };
                bugChartContainer();
                var bugChart = echarts.init(domBugChart);
                let option = {...};
                bugChart.setOption(option);
            }
     }
}
</script>

这样做有一个缺点,页面大小改变之后需要刷新,刷新之后图表自适应,不过实际使用中页面适配屏幕后大小改变的应用场景不多。

进阶版

 echarts官方提供了获取图表宽高的API函数 getWidth() getHeight(),可以对其进行操作,在自适应的前提下,设置图表最小宽高

loadSheetChart() {
      var domSheetChart = this.$refs.sheetChart;
      this.sheetChart = echarts.init(domSheetChart);
      let width =
        this.sheetChart.getWidth() < 250 ? 250 : this.sheetChart.getWidth();
      let height = this.sheetChart.getHeight();
    },

使用官方API resize ()

    barChartLoad() {
      const barChart = echarts.init(document.getElementById('barChart'));
      barChart.setOption(this.barChartOption);
      window.onresize = function() {
        barChart.resize();
      };
    },

推荐,使用起来方便简洁

转载自https://www.jianshu.com/p/c8e097cda407

相关文章:

  • 【Linux】信号 —— 信号的产生 | 信号的保存 | 信号的处理 | 可重入函数 | volalite关键字 | SIGCHLD
  • A Survey of Deep Learning-based Object Detection
  • Java新手小白入门篇 API -Socket网络编程
  • kafka如何保证消息不丢失?半分钟的答案和半个小时的答案有点不一样。
  • Java学习----集合1
  • PBR概念及PBR核心理论和渲染原理
  • 5.5如何去除有序数组的重复元素
  • PBR标准化工作流程
  • Vue学习第17天——netTick()的原理及使用
  • 英语语法精讲合集
  • 如何用数据采集网关快速采集工业现场数据,怎么搭建MQTT服务器?
  • Vue中的样式绑定
  • 大学网课答案公众号题库搭建
  • torch.utils.data
  • torch.torchvision
  • JavaScript-如何实现克隆(clone)函数
  • 时间复杂度分析经典问题——最大子序列和
  • 【React系列】如何构建React应用程序
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • Android Studio:GIT提交项目到远程仓库
  • ES学习笔记(12)--Symbol
  • EventListener原理
  • JavaScript新鲜事·第5期
  • MySQL QA
  • OSS Web直传 (文件图片)
  • Promise面试题2实现异步串行执行
  • Python学习笔记 字符串拼接
  • Python学习之路16-使用API
  • react-native 安卓真机环境搭建
  • Redis中的lru算法实现
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • vue 个人积累(使用工具,组件)
  • Vue实战(四)登录/注册页的实现
  • Web Storage相关
  • 百度小程序遇到的问题
  • 编写高质量JavaScript代码之并发
  • 构建二叉树进行数值数组的去重及优化
  • 聊聊redis的数据结构的应用
  • 树莓派 - 使用须知
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 写给高年级小学生看的《Bash 指南》
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • nb
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • $().each和$.each的区别
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转) RFS+AutoItLibrary测试web对话框