博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Echarts图表控件使用总结2(Line,Bar)—问题篇
阅读量:6300 次
发布时间:2019-06-22

本文共 12912 字,大约阅读时间需要 43 分钟。

Echarts图表控件使用总结1(Line,Bar):

1.前言

  a.前两天简单写了一篇在MVC中如何使用Echarts的文章,文章地址:,里面实现了Echart刷新和显示的功能,如图所示:

    

  b.但是今天上班发现遇到了一些问题,也是很细节的问题,那么下面我们就来探讨一下这几种问题的解决方法,如果大家还有什么更好地建议的话,希望大家能够留言。

  c.本人水平有限,难免写出来可能会出现错误,如果大家遇到有问题的地方希望能够留言,我将和你探讨并且更新错误内容。  

  d.下面我将阐述我遇到的两个需求和一个问题,那么针对这些问题的解决方法,如果大家还遇到其它什么需求或者问题,请留言。

2.问题

  a.Echarts开启自动刷新的时候,如果浏览器长时间不关闭或者退出自动刷新程序的网页的时候,如果时间足够长,会发现浏览器会自动关闭,原因是Echart内存没有来得及释放,导致内存溢出。

  b.如果Echarts在开发的时候我们选择既有树状也有线状(图片右上角),那么当我们单击线状查看的时候会发现当程序自动执行的时候就会又回到原始状态。

  c.当我们同时显示好几条数据的时候,单击某个数据会不显示,再单击会显示(图片中间最上面),那么如果我们只想看某一种的话这时候单击剩下最后一种的时候发现程序自动执行刷新又回到原始状态了。

  d.页面缓存的实现,当我们选择20秒刷新,如果关闭浏览器再次打开,又会回到原始状态,故而我们需要考虑解决缓存问题。

3.解决方法

  a.对于内存溢出的解决方法,Echart提供了clear和Dispose方法,在循环刷新之前调用即可解决这个问题

  b.对于问题b的解决方法在上篇文章中已经实现了,思路是:注册ecConfig.EVENT.MAGIC_TYPE_CHANGED事件,当单击的时候读取param.magicType.bar即可读取到用户单击的是什么类型(line,bar,....),然后在发送请求的时候将此类型当做参数传递到后台按照上篇博客的写法即可实现。

  c.对于问题c的解决方法思路如下:

    (1) 注册:ecConfig.EVENT.LEGEND_SELECTED,当单击的时候读取读取到单击的信息之后,存放在缓存中,在下次打开的时候进行处理。

  d.修改比较严重,后端都有修改,如果大家需要使用,请仔细检查。下面附前端JS代码。

  e.上面是本篇博客所有遇到的问题,简要说明一下,JS代码如下,其它代码请参考上篇博客的代码,没有做任何改动。

3.实现代码

  a.公用代码

1 var bmscommon = function () { };  2 bmscommon = {  3     //处理Ajax请求  4     ajax: function(options) {  5         var defaults = {  6             async: false,  7             cache: true,  8             type: "POST",  9             contentType: "application/json" 10         }; 11         defaults = $.extend(defaults, options); 12         //ajax请求 13         jQuery.ajax({ 14             url: defaults.url, 15             type: defaults.type, 16             cache: defaults.cache, 17             async: defaults.async, 18             contentType: defaults.contentType, 19             data: defaults.data, 20             dataType: "json", 21             onwait: "正在加载数据,请稍后...", 22             success: function(result) { 23                 if (defaults.fn) { 24                     defaults.fn.call(result); 25                 } 26                 return result; 27             } 28         }); 29     }, 30     /* cookie处理 31      * common.cookie('name','value',{expires:7,path:'/',domain:'jquery.com',secure:true}) 32      */ 33     cookie: function(name, value, options) { 34         if (typeof value != "undefined") { 35             options = options || {}; 36             if (value === null) { 37                 value = ""; 38                 options.expires = -1; //失效 39             } 40             var expires = ""; 41             if (options.expires && (typeof options.expires == "number" || options.expires.toUTCString)) { 42                 var date; 43                 if (typeof options.expires == 'number') { 44                     date = new Date(); 45                     date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000)); 46                 } else { 47                     date = options.expires; 48                 } 49                 expires = ";expires=" + date.toUTCString(); 50             } 51             var path = options.path ? ";path=" + options.path : ""; 52             var domain = options.domain ? ";domain=" + options.domain : ""; 53             var secure = options.secure ? ";secure" : ""; 54             document.cookie = [name, "=", encodeURIComponent(value), expires, path, domain, secure].join(''); 55         } else { 56             var cookieValue = null; 57             if (document.cookie && document.cookie != "") { 58                 var cookies = document.cookie.split(';'); 59                 for (var i = 0; i < cookies.length; i++) { 60                     var cookie = jQuery.trim(cookies[i]); 61                     if (cookie.substring(0, name.length + 1) == (name + "=")) { 62                         cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); 63                         break; 64                     } 65                 } 66             } 67             return cookieValue; 68         } 69         return this; 70     }, 71     //处理日期 72     date: function(obj, format, defval) { 73         var data; 74         if (/\/Date\((\d+)\)\//gi.test(obj)) { 75             data = eval(obj.replace(/\/Date\((\d+)\)\//gi, "new Date($1)")); 76         } else { 77             data = new Date(obj); 78             if (defval != null && data.toDateString() == (new Date(null)).toDateString()) { 79                 return defval; 80             } 81         } 82  83         function formatDate(date, mat) { 84             var paddNum = function(num) { 85                 num += ""; 86                 return num.replace(/^(\d)$/, "0$1"); 87             }; 88             //指定格式字符 89             var cfg = { 90                 yyyy: date.getFullYear() //年 : 4位 91                 , 92                 yy: date.getFullYear().toString().substring(2) //年 : 2位 93                 , 94                 M: date.getMonth() + 1 //月 : 如果1位的时候不补0 95                 , 96                 MM: paddNum(date.getMonth() + 1) //月 : 如果1位的时候补0 97                 , 98                 d: date.getDate() //日 : 如果1位的时候不补0 99                 ,100                 dd: paddNum(date.getDate()) //日 : 如果1位的时候补0101                 ,102                 hh: paddNum(date.getHours()) //时103                 ,104                 mm: paddNum(date.getMinutes()) //分105                 ,106                 ss: paddNum(date.getSeconds()) //秒107             };108             mat || (mat = "yyyy-MM-dd");109             return mat.replace(/([a-z])(\1)*/ig, function(m) { return cfg[m]; });110         }111 112         return formatDate(data, format);113     }114 };

  b.操作Echart插件

1 /* 功能:实现读取数据库中的需要监控的数据在前端展示,JS操作Echarts插件  2  * 创建人:Kencery  创建时间:2015-7-30   3  * 修改人:Kencery  修改时间:2015-8-6     4  * 修改人:Kencery  修改时间:2015-8-13   5  */  6   7 var etaoshi = window.etaoshi || {};  8 etaoshi.bms = etaoshi.bms || {};  9  10 etaoshi.bms.orderInfo = (function() { 11     var defaults = { 12         url: "/OrderInfo/ReadDataRefreshChats", 13         main: "main", 14         dropDownId: "dropDownId", 15         btnStopRefresh: "btnStopRefresh", 16         btnHandRefresh: "btnHandRefresh", 17     }; 18     var map = {}; //存储临时变量 19  20     var initialize = function() { 21         //第一步:读取选择的刷新时间。 22         var seconds = bmscommon.cookie("refreshSeconds"); 23         if (seconds) { 24             $("#" + defaults.dropDownId + " option[value=" + seconds + "]").attr("selected", "selected"); 25         } 26  27         initializeEchats(); //第二步:调用方法首次刷新结果 28         setInterValEchart(); //第三步骤:定时执行程序 29     }; 30     var bindEvent = function() { 31         $("#" + defaults.dropDownId).on("change", function() { refreshSecondChange(); }); 32         $("#" + defaults.btnStopRefresh).on("click", function() { stopRefresh(); }); 33         $("#" + defaults.btnHandRefresh).on("click", function() { handRefresh(); }); 34     }; 35  36     var initializeEchats = function() { 37         bmscommon.ajax({ 38             type: "get", 39             url: defaults.url, 40             cache: true, 41             data: {}, 42             fn: function() { 43                 var defaultMain = document.getElementById(defaults.main); 44                 var $Id = $(defaultMain).attr("id"); //用来给缓存作为标示 45                 var option = getJsonOptions(this, $Id); //处理构造参数 46                 initFillData(option, defaultMain, $Id); 47             } 48         }); 49     }; 50     var initFillData = function (option, main, $Id) { 51         var tempclear = map[$Id + "_id"]; 52         if (tempclear) { 53             tempclear.clear(); 54             tempclear.dispose(); 55             delete tempclear; 56             map[$Id + "_id"] = null; 57         } 58         var myChart = echarts.init(main); //初始化Echarts图标信息 59         if (!tempclear) { 60             map[$Id + "_id"] = myChart; 61         } 62         // 为echarts对象加载数据 63         myChart.setOption(option, true); 64         //添加事件 65         myChart.on(echarts.config.EVENT.MAGIC_TYPE_CHANGED, function(param) { 66             //将信息存放在Cookie缓存中 67             if (param.magicType.bar) { 68                 bmscommon.cookie($Id + "_selected_magic", "bar", { 69                     expires: 365, 70                     path: '/' 71                 }); 72             } else { 73                 bmscommon.cookie($Id + "_selected_magic", "line", { 74                     expires: 365, 75                     path: '/' 76                 }); 77             } 78         }); 79         myChart.on(echarts.config.EVENT.LEGEND_SELECTED, function(param) { 80             var tempcookielegend = {}, selected = param.selected; 81             $.each(selected, function(i, n) { 82                 if (!n) { 83                     tempcookielegend[i] = false; 84                 } 85             }); 86             bmscommon.cookie($Id + "_selected_legend", JSON.stringify(tempcookielegend), { 87                 expires: 365, 88                 path: '/' 89             }); 90         }); 91     }; 92     var setInterValEchart = function() { 93         map["setInterVal"] = window.setInterval(function () { 94             initializeEchats(); 95         }, parseInt($("#" + defaults.dropDownId).find("option:selected").text() * 1000)); 96     }; 97  98     var refreshSecondChange = function() { 99         bmscommon.cookie("refreshSeconds", $("#" + defaults.dropDownId).val(), {100             expires: 365,101             path: '/'102         });103         clearInterval(map["setInterVal"]);104         initializeEchats();  //先执行一遍105         setInterValEchart();  //在调用定时执行106     };107     var stopRefresh = function() {108         clearInterval(map["setInterVal"]);109     };110     var handRefresh = function() {111         initializeEchats();112     };113 114     var getJsonOptions = function(datas, $Id) {115         var dataSeriesList = datas.SeriesList;116         //最大值,最小值,平均值添加117         $.each(dataSeriesList, function(j, n) { //前端处理JS添加最大值和最小值以及平均值。118             if (n) {119                 //添加最大值和最小值120                 var market = {};121                 var data1 = [];122                 var max = {}, min = {};123                 min.type = 'min';124                 min.name = '最小值';125                 data1.push(min);126                 max.type = 'max';127                 max.name = '最大值';128                 data1.push(max);129                 market.data = data1;130                 n.markPoint = market;131                 //平均值132                 var markLine = {};133                 var dataAvg = [];134                 var avg = {};135                 avg.type = 'average';136                 avg.name = '平均值';137                 dataAvg.push(avg);138                 markLine.data = dataAvg;139                 n.markLine = markLine;140             }141         });142         //line,bar判断143         try {144             var type = bmscommon.cookie($Id + "_selected_magic") == null ? "bar" : bmscommon.cookie($Id + "_selected_magic");145             $.each(dataSeriesList, function(i, n) {146                 if (n) {147                     n.type = type;148                 }149             });150         } catch(e) {151         }152 153         //处理单击显示各种不同图形的控制154         try {155             datas.selected = JSON.parse(bmscommon.cookie($Id + "_selected_legend"));156             if (!datas.selected) {157                 datas.selected = {};158             }159         } catch(e) {160         }161 162         var option = {163             title: {164                 text: '订单号剩余量监控',165             },166             tooltip: {167                 show: true,168                 trigger: 'axis'169             },170             toolbox: {171                 show: true,172                 feature: {173                     mark: { show: true },174                     dataView: { show: true, readOnly: false },175                     magicType: { show: true, type: ['line', 'bar'] },176                     restore: { show: true },177                     saveAsImage: { show: true }178                 }179             },180             legend: {181                 data: datas.Legend,182                 selected: datas.selected183             },184             calculable: true,185             xAxis: [186                 {187                     name: datas.XName,188                     type: 'category',189                     data: datas.XAxis  //所有日期读取190                 }191             ],192             yAxis: [{193                 name: '剩余量',194                 type: 'value',195                 scale: true,196                 precision: 2,197                 splitNumber: 12,198                 splitArea: { show: true }199             }],200             series: dataSeriesList201         };202         return option;203     };204 205     return {206         init: function(options) {207             $.extend(defaults, options || {}); //将options的值赋值给上述对象208             initialize(); //初始化信息209             bindEvent(); //触发事件210         }211     };212 }());

转载地址:http://jfgta.baihongyu.com/

你可能感兴趣的文章
浅谈MySQL 数据库性能优化
查看>>
《UNIX/Linux 系统管理技术手册(第四版)》——1.10 其他的权威文档
查看>>
灵动空间 创享生活
查看>>
《UNIX网络编程 卷1:套接字联网API(第3版)》——8.6 UDP回射客户程序:dg_cli函数...
查看>>
不要将时间浪费到编写完美代码上
查看>>
《算法基础:打开算法之门》一3.4 归并排序
查看>>
高德开放平台开放源代码 鼓励开发者创新
查看>>
《高并发Oracle数据库系统的架构与设计》一2.5 索引维护
查看>>
Firefox 是 Pwn2own 2014 上攻陷次数最多的浏览器
查看>>
阿里感悟(十八)- 应届生Review
查看>>
话说模式匹配(5) for表达式中的模式匹配
查看>>
《锋利的SQL(第2版)》——1.7 常用函数
查看>>
jquery中hover()的用法。简单粗暴
查看>>
线程管理(六)等待线程的终结
查看>>
spring boot集成mongodb最简单版
查看>>
DELL EqualLogic PS存储数据恢复全过程整理
查看>>
《Node.js入门经典》一2.3 安装模块
查看>>
《Java 开发从入门到精通》—— 2.5 技术解惑
查看>>
Linux 性能诊断 perf使用指南
查看>>
实操分享:看看小白我如何第一次搭建阿里云windows服务器(Tomcat+Mysql)
查看>>