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 相关文章推荐
JavaScript 给汉字排序实例代码
Jun 28 Javascript
javascript 面向对象继承
Nov 26 Javascript
在JQuery dialog里的服务器控件 事件失效问题
Dec 08 Javascript
23个Javascript弹出窗口特效整理
Feb 25 Javascript
Extjs gridpanel 出现横向滚动条问题的解决方法
Jul 04 Javascript
js中parseInt函数浅谈
Jul 31 Javascript
js实现统计字符串中特定字符出现个数的方法
Aug 02 Javascript
vue源码入口文件分析(推荐)
Jan 30 Javascript
微信小程序如何像vue一样在动态绑定类名
Apr 17 Javascript
JavaScript实现与使用发布/订阅模式详解
Jan 19 Javascript
JavaScript实现捕获鼠标坐标
Apr 12 Javascript
详解Vue+elementUI build打包部署后字体图标丢失问题
Jul 13 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 图片上传实现代码 带详细注释
2010/04/29 PHP
PHP中将ip地址转成十进制数的两种实用方法
2013/08/15 PHP
php实现mysql封装类示例
2014/05/07 PHP
phalcon model在插入或更新时会自动验证非空字段的解决办法
2016/12/29 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
2017/11/17 PHP
php数组指针函数功能及用法示例
2020/02/11 PHP
JQuery小知识
2010/10/15 Javascript
四种参数传递的形式——URL,超链接,js,form表单
2015/07/24 Javascript
Node.js中环境变量process.env的一些事详解
2017/10/26 Javascript
node的process以及child_process模块学习笔记
2018/03/06 Javascript
QQ跳转支付宝并自动领红包脚本(最新)
2018/06/22 Javascript
jQuery实现模糊搜索功能的方法分析
2018/06/29 jQuery
vue forEach循环数组拿到自己想要的数据方法
2018/09/21 Javascript
浅谈JavaScript 代码整洁之道
2018/10/23 Javascript
angular 表单验证器验证的同时限制输入的实现
2019/04/11 Javascript
微信小程序实现定位及到指定位置导航的示例代码
2019/08/20 Javascript
VUE实现移动端列表筛选功能
2019/08/23 Javascript
Python中不同进制互相转换(二进制、八进制、十进制和十六进制)
2015/04/05 Python
Python3通过Luhn算法快速验证信用卡卡号的方法
2015/05/14 Python
python网络编程之数据传输UDP实例分析
2015/05/20 Python
Python写的一个简单监控系统
2015/06/19 Python
numpy实现合并多维矩阵、list的扩展方法
2018/05/08 Python
python实现图片批量压缩程序
2018/07/23 Python
Python实现的建造者模式示例
2018/08/06 Python
Python向excel中写入数据的方法
2019/05/05 Python
PyQt5实现从主窗口打开子窗口的方法
2019/06/19 Python
Django 后台获取文件列表 InMemoryUploadedFile的例子
2019/08/07 Python
Python基础之字符串操作常用函数集合
2020/02/09 Python
Django 实现对已存在的model进行更改
2020/03/28 Python
CSS3+font字体文件实现圆形半透明菜单具体步骤(图解)
2013/06/03 HTML / CSS
Electrolux伊莱克斯巴西商店:家用电器、小家电和配件
2018/05/23 全球购物
Myprotein亚太地区:欧洲第一在线运动营养品牌
2020/12/20 全球购物
工作表现评语
2014/01/19 职场文书
党支部书记岗位责任制
2014/02/11 职场文书
《珍珠泉》教学反思
2014/02/20 职场文书
Three.js实现雪糕地球的使用示例详解
2022/07/07 Javascript