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中的其他对象
Jan 16 Javascript
JavaScript入门教程(7) History历史对象
Jan 31 Javascript
利用浏览器全屏api实现js全屏
Jan 16 Javascript
《JavaScript DOM 编程艺术》读书笔记之DOM基础
Jan 09 Javascript
jQuery使用ajax跨域获取数据的简单实例
May 18 Javascript
javascript垃圾收集机制的原理分析
Dec 08 Javascript
Bootstrap modal 多弹窗之叠加显示不出弹窗问题的解决方案
Feb 23 Javascript
分析javascript中9 个常见错误阻碍你进步
Sep 18 Javascript
js获取html页面代码中图片地址的实现代码
Mar 05 Javascript
jQuery常见的遍历DOM操作详解
Sep 05 jQuery
JS Ajax请求会话过期处理问题解决方法分析
Nov 16 Javascript
微信小程序以7天为周期连续签到7天功能效果的示例代码
Aug 20 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原型模式
2014/11/25 PHP
使用phpQuery获取数组的实例
2017/03/13 PHP
在 PHP 和 Laravel 中使用 Traits的方法
2019/11/13 PHP
url地址自动加#号问题说明
2010/08/21 Javascript
javascript基础知识大集锦(二) 推荐收藏
2011/01/13 Javascript
使用jQuery操作Cookies的实现代码
2011/10/09 Javascript
纯文字版返回顶端的js代码
2013/08/01 Javascript
jquery内置验证(validate)使用方法示例(表单验证)
2013/12/04 Javascript
网页右下角弹出窗体实现代码
2014/06/05 Javascript
jquery实现的用户注册表单提示操作效果代码分享
2015/08/28 Javascript
JS+CSS实现简易的滑动门效果代码
2015/09/24 Javascript
jquery ztree实现树的搜索功能
2016/02/25 Javascript
清除输入框内的空格
2016/12/21 Javascript
js实现一个猜数字游戏
2017/03/31 Javascript
Vue.js鼠标悬浮更换图片功能
2017/05/17 Javascript
vue中计算属性(computed)、methods和watched之间的区别
2017/07/27 Javascript
vue3.0 CLI - 2.1 -  component 组件入门教程
2018/09/14 Javascript
Angular8 简单表单验证的实现示例
2020/06/03 Javascript
Vue开发中常见的套路和技巧总结
2020/11/24 Vue.js
JavaScript实现4位随机验证码的生成
2021/01/28 Javascript
使用Python脚本将Bing的每日图片作为桌面的教程
2015/05/04 Python
Python实现账号密码输错三次即锁定功能简单示例
2019/03/29 Python
使用Python paramiko模块利用多线程实现ssh并发执行操作
2019/12/05 Python
python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例
2020/03/18 Python
python二维图制作的实例代码
2020/12/03 Python
Ubuntu20.04环境安装tensorflow2的方法步骤
2021/01/29 Python
一款纯css3实现的圆形旋转分享按钮旋转角度可自己调整
2014/09/02 HTML / CSS
UGG雪地靴荷兰官网:UGG荷兰
2016/09/09 全球购物
Farah官方网站:男士服装及配件
2019/11/01 全球购物
公务员培训心得体会
2013/12/28 职场文书
《草原的早晨》教学反思
2014/04/08 职场文书
国旗下讲话演讲稿
2014/05/08 职场文书
绿色环保演讲稿
2014/05/10 职场文书
森马旗舰店双十一营销方案
2014/09/29 职场文书
学校党委干部个人对照检查材料思想汇报
2014/10/09 职场文书
《扇形统计图》教学反思
2016/02/17 职场文书