echarts学习笔记之图表自适应问题详解


Posted in Javascript onNovember 22, 2017

前言

为了直观查看公司服务器各个进程占用的内存动态情况,我使用echarts进行数据可视化,具体的实现过程按下不表。

最后实现的效果如图:

echarts学习笔记之图表自适应问题详解

然后问题就来了,因UI采用了Bootstrap响应式框架,所以除了图表之外其他都是响应式。当窗口缩小后,就会发生很尴尬的出界事件。

如图:

echarts学习笔记之图表自适应问题详解

针对这个问题,刚开始的解决思路及方法:把echart容器的宽度设置为100%;

<div class="col-sm-12 row" id="logic1_node" style="width:100%;height:700px"></div>

这样之后依然存在问题:页面初始的宽度是多少,canvas宽度就是多少,之后不会再变化。

便尝试通过jsDOM操作,强行令canvas的宽度为100%,however too young too simple!

调整浏览器宽度发现,canvas画布的宽度是随之变化的,然而画布里面的图表内容却像被挤压在一起的馅饼,模糊扭曲了。

echarts学习笔记之图表自适应问题详解

到这里细心的同学可以发现,echart图表一旦绘制成功,内容就不会再变化。所以对于echart图表,其"响应式"应该是可以随着窗口调整不断被重新绘制,不是简单的调整宽高。

到echart官网看了Example,发现官网的实例都具有响应式功能,确实不是单纯的宽度改变,是每次调整后图表是重新绘制。猜想echart源码里应该有resize这个API,打开调试器,打开echart源码,Ctrl+F,果然找到了。

echarts学习笔记之图表自适应问题详解

再仔细查看官方文档:

echarts学习笔记之图表自适应问题详解

echart图表本身是提供了一个resize的函数的。

于是当浏览器发生resize事件的时候,让其触发echart的resize事件,重绘canvas。(也可以通过其他事件触发)

echarts学习笔记之图表自适应问题详解

附:Echarts 页面多图自适应的解决办法

网上看到有不少人使用Echarts抽象出来的框架,实现自适应的效果代码:window.onresize  = option.chart.resize() ,  这个代码基本是官网上的window.onresize = myCharts.resize();的翻版。

但在实际的应用中一个页面可能会有好几个Echarts图表,而使用window.onresize = option.chart.resize() ,加载页面图表后,页面上只有一个图表会根据浏览器的变化而自适应。如果要是页面上的图表都要自适应。则需要将resize事件叠加在不同的图上面,使用一下代码可以实现。

window.addEventListener("resize", function () {

           option.chart.resize();

         });

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
js查找父节点的简单方法
Jun 28 Javascript
ASP.NET jQuery 实例10 动态修改hyperlink的URL值
Feb 03 Javascript
JavaScript 对象深入学习总结(经典)
Sep 29 Javascript
javascript关于继承解析
May 10 Javascript
jquery.form.js框架实现文件上传功能案例解析(springmvc)
May 26 Javascript
JavaScript中Math对象的方法介绍
Jan 05 Javascript
Linux使用Node.js建立访问静态网页的服务实例详解
Mar 21 Javascript
使用bootstraptable插件实现表格记录的查询、分页、排序操作
Aug 06 Javascript
微信小程序实现顶部选项卡(swiper)
Jun 19 Javascript
javascript计算渐变颜色的实例
Sep 22 Javascript
jquery-file-upload 文件上传带进度条效果
Nov 21 jQuery
如何使用less实现随机下雪动画详解
Jan 02 Javascript
arcgis for js栅格图层叠加(Raster Layer)问题
Nov 22 #Javascript
在vue中添加Echarts图表的基本使用教程
Nov 22 #Javascript
ActiveX控件的使用-js实现打印超市小票功能代码详解
Nov 22 #Javascript
前端必备插件之纯原生JS的瀑布流插件Macy.js
Nov 22 #Javascript
vue.js模仿京东省市区三级联动的选择组件实例代码
Nov 22 #Javascript
浅谈Angular 中何时取消订阅
Nov 22 #Javascript
深入理解Angular4订阅(Subscribe)与取消
Nov 22 #Javascript
You might like
php各种编码集详解和以及在什么情况下进行使用
2011/09/11 PHP
php适配器模式介绍
2012/08/14 PHP
PHP在innodb引擎下快速代建全文搜索功能简明教程【基于xunsearch】
2016/10/14 PHP
Prototype使用指南之form.js
2007/01/10 Javascript
javascript[js]获取url参数的代码
2007/10/17 Javascript
克隆javascript对象的三个方法小结
2011/01/12 Javascript
基于编写jQuery的无缝滚动插件
2014/08/02 Javascript
JavaScript中iframe实现局部刷新的几种方法汇总
2016/01/06 Javascript
Node.js 数据加密传输浅析
2016/11/16 Javascript
浅谈jQuery框架Ajax常用选项
2017/07/08 jQuery
vue jsx 使用指南及vue.js 使用jsx语法的方法
2017/11/11 Javascript
vue 自定义 select内置组件
2018/04/10 Javascript
vue中的模态对话框组件实现过程
2018/05/01 Javascript
JS+H5 Canvas实现时钟效果
2018/07/20 Javascript
vue.js 2.*项目环境搭建、运行、打包发布的详细步骤
2019/05/01 Javascript
js实现选项卡效果
2020/03/07 Javascript
JS严格模式原理与用法实例分析
2020/04/27 Javascript
浅谈JavaScript中你可能不知道URL构造函数的属性
2020/07/13 Javascript
微信小程序实现自定义底部导航
2020/11/18 Javascript
python定时采集摄像头图像上传ftp服务器功能实现
2013/12/23 Python
Pandas读取MySQL数据到DataFrame的方法
2018/07/25 Python
详解Python3中setuptools、Pip安装教程
2019/06/18 Python
python 控制Asterisk AMI接口外呼电话的例子
2019/08/08 Python
Python 实现黑客帝国中的字符雨的示例代码
2020/02/20 Python
python梯度下降算法的实现
2020/02/24 Python
pycharm中导入模块错误时提示Try to run this command from the system terminal
2020/03/26 Python
利用jupyter网页版本进行python函数查询方式
2020/04/14 Python
Python基于模块Paramiko实现SSHv2协议
2020/04/28 Python
NYX Professional Makeup官方网站:专业彩妆和美容产品
2019/10/29 全球购物
以太网Ethernet IEEE802.3
2013/08/05 面试题
室内设计专业个人的自我评价
2013/12/18 职场文书
迎新晚会邀请函
2014/02/01 职场文书
施工安全承诺书
2014/05/22 职场文书
python实现自定义日志的具体方法
2021/05/28 Python
一篇文章学会Vue中间件管道
2021/06/20 Vue.js
分享Python异步爬取知乎热榜
2022/04/12 Python