最近在用HighCharts画趋势图,如果按照设计文档上来画那太复杂了,于是根据自己多年的经验改动了设计文档,添加了highcharts的标示区,然而我也发现,最后一次画highchart趋势图还是在2年前,现在居然都不知道怎么画了(其实也不是不会画,只不过给的开发时间紧,而且我又是个急子,所以觉得加速完成,然而越急就越画不好,这点我离葛经理还差很远,所以要加强这方面的培训),熟悉之后才慢慢从它的API中解脱出来,下面贴代码吧:

$(function () {
$.fn.zTree.init($("#search_tree"), swhTreeObj);
initTable();
initDate();
$(".td-title").hide();
$("#dlg").dialog({
width: 340,
height: 410,
modal: true,
title: '检修单信息',
closed: true,
buttons: [{
text: '确定',
iconCls: 'icon-save',
plain: true,
handler: function () {
$("#dlg").dialog('close');
}
}]
});
});
var tid = "";
function query() {
$("#charts").empty();
var treeObj = $.fn.zTree.getZTreeObj("search_tree");
var node = treeObj.getSelectedNodes();
var selPortGrid = $('#selPort').combogrid('grid');
var selProjectGrid = $('#selProject').combogrid('grid');
var selPortGridData = selPortGrid.datagrid('getSelections');
var selProjectGridData = selProjectGrid.datagrid('getSelections'); var kssj = $("#kssj").val();
var jssj = $("#jssj").val(); var id = [];
for (var i = 0; i < selProjectGridData.length; i++) {
id.push(selProjectGridData[i].Id);
}
$.post('/AjaxSwitchAnalysis/QueryResult.cspx', {
switchmac: node[0].Mac,
projectid: id.join(','),
kssj: kssj,
jssj: jssj
}, function (obj) {
if (typeof obj != "undefined" && obj != null) {
var val = obj.data;
var timedata = [];
for (var n = 0; n < obj.repairData.length; n++) {
tid = obj.repairData[n].Id;
timedata.push({
color: '#E0ECFF',
from: convertToUTC(obj.repairData[n].BeginTime),
to: convertToUTC(obj.repairData[n].EndTime),
//zIndex: 3,
label: { text: obj.repairData[n].BeginTime + ' 到 ' + obj.repairData[n].EndTime + " 的检修工作", style: {
color: 'red'
}
},
events: {
click: function (e) {
$.getJSON('/AjaxSwitchRepair/GetDataById.cspx', { id: tid }, function (tval) {
$("#dlg").dialog('open');
$("#begintime").val(tval[0].BeginTime);
$("#endtime").val(tval[0].EndTime);
$("#content").val(tval[0].Content);
$("#reason").val(tval[0].Reason);
$("#operator").val(tval[0].Operator);
$("#device").val(tval[0].SwitchName);
$("#device").attr('title', tval[0].SwitchName);
});
}
}
});
} var charts = [];
//根据不同的项目类型进行项目分组
//遍历用户选中的所有项目
for (var k = 0; k < selProjectGridData.length; k++) {
var data = [];
var flag = false;
//遍历从后台返回的数据
for (var i = 0; i < val.length; i++) {
//判断项目类型是否是端口流量,如果是就要解析json数据
if (selProjectGridData[k].Id == val[i].Id) {
if (val[i].ProjectType != "json") {
data.push([convertToUTC(val[i].InspectDate), parseInt(val[i].Value)]);
} else {
//端口的计算已经在this的地方存到charts了,所以不能再把端口再push进charts,因此要加flag标识一下
flag = true;
//解析端口json数据
var json = $.parseJSON(val[i].Value);
for (var l = 0; l < selPortGridData.length; l++) {
data = [];
var name = "";
var f = false;
for (var m = 0; m < json.length; m++) {
if (selPortGridData[l].Port == json[m].name) {
data.push([convertToUTC(val[i].InspectDate), parseInt(json[m].value)]);
name = selPortGridData[l].Port;
}
}
//判断端口是否已经存在,如果存在就要添加进去(目的是为了画出线)
for (var s = 0; s < charts.length; s++) {
for (var t = 0; t < charts[s].length; t++) {
if (charts[s][t].name == name) {
f = true;
charts[s][t].data.push(data[0]);
break;
}
}
}
if (!f) {
//this
charts.push([{ name: name, data: data, yAxis: 0}]);
}
}
}
}
}
if (!flag) {
charts.push([{ name: selProjectGridData[k].Name, data: data, yAxis: 0}]);
}
}
//判断要显示两个y轴还是一个y轴
if (charts.length == 2) {
$('<div id="container1" style="height: 400px;border-bottom:1px solid #95B8E7;border-top:1px solid #95B8E7;margin-bottom:20px;"></div>').appendTo("#charts");
for (var r = 0; r < charts[1].length; r++) {
charts[1][r].yAxis = 1;
}
initTwoCharts("container1", charts[0].concat(charts[1]), timedata);
} else {
for (var j = 0; j < charts.length; j++) {
$('<div id="container' + j + '" style="height: 400px;border-bottom:1px solid #95B8E7;border-top:1px solid #95B8E7;margin-bottom:20px;"></div>').appendTo("#charts");
initCharts("container" + j, charts[j], timedata);
}
}
}
}, 'json');
} function convertToUTC(val) {
var year = val.split(' ')[0].split('-')[0];
var month = val.split(' ')[0].split('-')[1];
var day = val.split(' ')[0].split('-')[2]; var h = val.split(' ')[1].split(':')[0];
var m = val.split(' ')[1].split(':')[1];
var s = val.split(' ')[1].split(':')[2];
return Date.UTC(year, month, day, h, m, s);
} function initDate() {
var myDate = new Date();
$("#jssj").val(myDate.Format("yyyy-MM-dd"));
myDate.setMonth(myDate.getMonth() - 1);
$("#kssj").val(myDate.Format("yyyy-MM-dd"));
} //初始化datagrid
var initTable = function () {
$("#selProject").combogrid(selProjectObj);
}; //列表对象
var selProjectObj = {
panelWidth: 200,
multiple: true,
idField: 'Id',
textField: 'Name',
url: '/AjaxInspectProject/QueryProject.cspx',
method: 'get',
columns: [[
{ field: 'ck', checkbox: true },
{ field: 'Id', hidden: true },
{ field: 'Name', title: '项目名称', width: 80 }
]],
onCheck: function (index, row) {
if (row.ProjectType == "json" && row.Name == "端口流量") {
$(".td-title").show();
}
},
onUncheck: function (index, row) {
if (row.ProjectType == "json" && row.Name == "端口流量") {
$(".td-title").hide();
}
},
fitColumns: true
}; var selPortObj = {
panelWidth: 200,
multiple: true,
idField: 'Id',
textField: 'Port',
url: '/AjaxSwitcherPortInfo/QueryPortBySwitch.cspx',
queryParams: { switchmac: '' },
method: 'get',
columns: [[
{ field: 'ck', checkbox: true },
{ field: 'Id', hidden: true },
{ field: 'Port', title: '端口名称', width: 80 }
]],
fitColumns: true
}; function initCharts(id, data, timearea) {
$('#' + id).highcharts({
title: {
text: '巡检项目趋势图',
x: -20 //center
},
xAxis: {
//x轴为时间类型
type: 'datetime',
//设置x轴间隔时间为一天
tickInterval: 24 * 3600 * 1000,
labels: {
formatter: function () {
return Highcharts.dateFormat('%Y-%m-%d', this.value);
}
},
plotBands: timearea
},
yAxis: [{
min: 0,
title: {
text: '巡检值'
}
}],
tooltip: {
xDateFormat: '%Y-%m-%d %H:%M:%S'//鼠标移动到趋势线上时显示的日期格式
},
series: data,
//去掉highcharts.com链接
credits: {
enabled: false
}
});
} function initTwoCharts(id, data, timearea) {
$('#' + id).highcharts({
title: {
text: '巡检项目趋势图',
x: -20 //center
},
xAxis: {
type: 'datetime',
tickInterval: 24 * 3600 * 1000,
labels: {
formatter: function () {
return Highcharts.dateFormat('%Y-%m-%d', this.value);
}
},
plotBands: timearea
},
yAxis: [{
min: 0,
title: {
text: '巡检值'
},
plotLines: [{
value: 0,
width: 1,
color: '#808080'
}]
}, {
opposite: true,
min: 0,
title: {
text: '巡检值'
},
plotLines: [{
value: 0,
width: 1,
color: 'red'
}]
}],
tooltip: {
xDateFormat: '%Y-%m-%d %H:%M:%S'//鼠标移动到趋势线上时显示的日期格式
},
series: data,
//去掉highcharts.com链接
credits: {
enabled: false
}
});
} //------------------------------------------------------------
var swhTreeObj = {
check: {
enable: false
},
async: {
enable: true,
url: "/AjaxSwitchDynamicInfo/GetSwitchSearchTree.cspx",
autoParam: ["id", "name=n"],
otherParam: { "type": "switchport" }
},
data: {
simpleData: {
enable: true,
idKey: "id",
pIdKey: "pId",
rootPId: 0
}
},
callback: {
onClick: onClickCheckEvent
}
}; function onClickCheckEvent(e, treeId, treeNode) {
var zTree = $.fn.zTree.getZTreeObj(treeId);
zTree.checkNode(treeNode, !treeNode.checked, null, true);
if (treeNode.type == "switch") {
selPortObj.queryParams.switchmac = treeNode.Mac;
} else {
selPortObj.queryParams.switchmac = '';
}
$("#selPort").combogrid(selPortObj);
return false;
} /**
* 日期时间格式化方法,
* 可以格式化年、月、日、时、分、秒、周
**/
Date.prototype.Format = function (formatStr) {
var week = ['日', '一', '二', '三', '四', '五', '六'];
return formatStr.replace(/yyyy|YYYY/, this.getFullYear())
.replace(/yy|YY/, (this.getYear() % 100) > 9 ? (this.getYear() % 100).toString() : '0' + (this.getYear() % 100))
.replace(/MM/, (this.getMonth() + 1) > 9 ? (this.getMonth() + 1).toString() : '0' + (this.getMonth() + 1)).replace(/M/g, (this.getMonth() + 1))
.replace(/w|W/g, week[this.getDay()])
.replace(/dd|DD/, this.getDate() > 9 ? this.getDate().toString() : '0' + this.getDate()).replace(/d|D/g, this.getDate())
.replace(/HH|hh/g, this.getHours() > 9 ? this.getHours().toString() : '0' + this.getHours()).replace(/H|h/g, this.getHours())
.replace(/mm/g, this.getMinutes() > 9 ? this.getMinutes().toString() : '0' + this.getMinutes()).replace(/m/g, this.getMinutes())
.replace(/ss/g, this.getSeconds() > 9 ? this.getSeconds().toString() : '0' + this.getSeconds()).replace(/S|s/g, this.getSeconds());
};

HighCharts画时间趋势图,标示区以及点击事件操作的更多相关文章

  1. 使用 amcharts 和 highcharts 绘制多曲线时间趋势图的通用方法

    工作中用到, 这里分享一下. 可以使用 amcharts 和 highcharts 在同一坐标中绘制多个对比曲线图. 当然, 对图形没有过多装饰, 可以参考 API 文档: highcharts:   ...

  2. 百度echarts扇形图每个区块增加点击事件

    效果图:操作人员要求 :我想看这个扇形图对应的 页面信息,给我加个链接跳转:原先的chart.js发现没有api,后来改用百度的echart.js <!DOCTYPE html> < ...

  3. Visio画UML类图、序列图 for Java

    参考文档: 1.百度搜索: 怎样用Visio 2007画C++类图 连接 https://jingyan.baidu.com/article/9f7e7ec07286e16f281554f7.html ...

  4. echarts雷达图点击事件

    最近看见别人问的问题,点击雷达图的拐点,获取点击数据的问题,直接上代码. echarts配置问题:https://www.douban.com/note/509404582/ <!doctype ...

  5. echarts雷达图点击事件 包含(2.x,3.85,4.02)测试

    最近看见别人问的问题,点击雷达图的拐点,获取点击数据的问题,直接上代码. echarts 2x 的点击事件 echarts配置问题:https://www.douban.com/note/509404 ...

  6. Highcharts 标示区曲线图;Highcharts 对数图表;Highcharts 时间间隔图表

    Highcharts 标示区曲线图 配置 使用 yAxis.plotBands 属性来配置标示区.区间范围使用 'from' 和 'to' 属性.颜色设置使用 'color' 属性.标签样式使用 'l ...

  7. 使用highcharts实现无其他信息纯趋势图实战实例

    使用highcharts实现无其他信息纯趋势图实战实例 Highcharts去掉或者隐藏掉y轴的刻度线yAxis : { gridLineWidth: 0, labels:{ //enabled:fa ...

  8. 使用Astah画UML类图经验总结

    从学习需求工程与UML开始,就开始接触到Astah这款软件,但是当时完全是为了对UML各种图的了解加深才使用了这款软件.当时画图,都是完全凭借自己想,并没有考虑实际情况,而且画的图都是很简单的,甚至有 ...

  9. Excel应该这么玩——7、我是预言家:绘制趋势图

    让我们先看一个场景:你是公司销售部的员工,你手里有公司最近几年的销售额相关的数据,经理希望你预测下个月的销售额.盯着一堆数据,你或许会想到画一张XY坐标图,然后将每个月份的销售额标定为一个坐标.但是下 ...

随机推荐

  1. 【liunx】使用xshell连接虚拟机上的CentOS 7,使用xhell连接本地虚拟机上的Ubuntu, 获取本地虚拟机中CentOS 7的IP地址,获取本地虚拟机中Ubuntu 的IP地址,Ubuntu开启22端口

    注意,如果想用xshell去连接本地虚拟机中的linux系统,需要本地虚拟机中的系统是启动的才能连接!!!!! ============================================ ...

  2. LeetCode: Implement strStr() [027]

    [题目] Implement strStr(). Returns a pointer to the first occurrence of needle in haystack, or null if ...

  3. PhpSpreadsheet生成Excel时实现单元格自动换行

    PhpSpreadsheet是PHPExcel的替代版本,PHPExcel的作者已经停止了更新,今天尝试了使用PhpSpreadsheet生成Excel的时候支持单元格内的自动换行,发现用法其实差不多 ...

  4. 基尼系数(Gini coefficient),洛伦茨系数

    20世纪初意大利经济学家基尼,于1922年提出的定量测定收入分配差异程度的指标.它是根据洛伦茨曲线找出了判断分配平等程度的指标(如下图). 设实际收入分配曲线和收入分配绝对平等曲线之间的面积为A,实际 ...

  5. 金蝶KIS下载地址

    升级方法: 您好,建议您先升级到标准版7.5,再升级到标准版8.1,直接用7.5的软件打开金蝶2000的账套,会提示升级,再用8.1的软件打开7.5的账套,升级前,需先备份账套. 金蝶KIS标准版和业 ...

  6. [leetcode]Binary Tree Preorder Traversal @ Python

    原题地址:http://oj.leetcode.com/problems/binary-tree-preorder-traversal/ 题意:这题用递归比较简单.应该考察的是使用非递归实现二叉树的先 ...

  7. asp.net中使用ueditor 1.3.6上传图片问题

    在asp.net中使用ueditor 1.3.6版本上传图片时,出现上传成功但是,图片无法正常显示的问题,解决方法如下: 只需要将imageUp.ashx中的info = up.upFile(cont ...

  8. iOS开发-UIWebView加载本地和网络数据

    UIWebView是内置的浏览器控件,可以用它来浏览网页.打开文档,关于浏览网页榜样可以参考UC,手机必备浏览器,至于文档浏览的手机很多图书阅读软件,UIWebView是一个混合体,具体的功能控件内置 ...

  9. 开源 java CMS - FreeCMS2.2 网站管理

    项目地址:http://www.freeteam.cn/ 网站管理 FreeCMS支持站点群模式,并支持无限树级管理. 网站的相关文件在site文件夹下,每一个网站有自己的文件夹,源文件文件夹名就是自 ...

  10. (转)unity3d插件 HUD Text 学习

    转自:http://www.cnblogs.com/code1992/p/3657291.html 使用版本 NGUI_HUD_Text_v1.11 .英语水平差,难免有很多不足之处,忘批评指正.本文 ...