HighCharts画时间趋势图,标示区以及点击事件操作

最近在用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());
};

时间: 2024-09-28 00:46:18

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

折线趋势图的实现方法

问题描述 VB.net2005里面怎么实现折线趋势图,一组整数的数组 解决方案 解决方案二:给你一段我曾经画电流电压曲线图的代码,你参考下DimGAsGraphics'=PictureBox1.CreateGraphics()DimbmpAsNewBitmap(PictureBox1.Width,PictureBox1.Height)G=Graphics.FromImage(bmp)DimPAsNewPen(Color.Green,2)G.DrawLine(P,0,300,733,300)G.D

PHP实现股票趋势图和柱形图_php技巧

基于强大的pchart类库. <?php /* * 股票趋势图和柱形图 * @author: Skiychan <developer@zzzzy.com> * @created: 02/05/2015 */ include "libs/pData.class.php"; include "libs/pDraw.class.php"; include "libs/pImage.class.php"; include "d

Python获取单个程序CPU使用情况趋势图_python

本文定位:已将CPU历史数据存盘,等待可视化进行分析,可暂时没有思路. 前面一篇文章(http://www.jb51.net/article/61956.htm)提到过在linux下如何用python将top命令的结果进行存盘,本文是它的后续. python中我们可以用matplotlib很方便的将数据可视化,比如下面的代码: 复制代码 代码如下: import matplotlib.pyplot as plt list1 = [1,2,3] list2 = [4,5,9] plt.plot(l

Android 常用效果(各种进度条,酷炫loading动画,火箭升空,撒花以及趋势图)

最近时间比较充裕一些,总结了下几个项目用到的ui效果,在这边共享给大家,也给自己做个记录(后面会有demo贴出).  主要是以下几种ui效果: 进度条多种展示 开源loading动画 火箭升空 撒花效果(仿微信) 气温趋势图 一.进度条  这边主要是有四种进度条展示,具体效果请往下看: 二.开源loading动画  这边有两种动画,来自于网上的开源demo,第一种是市场上app的比较常见动画,第二种是新版58的加载动画,具体效果请往下看: 三.火箭升空  这是在公司的一键清理项目中用到的一个动画

R语言的igraph画社交关系图示例

R语言中的igraph可以很方便地画出社交关系图.下面是几个示例. 1.最简单的社交关系图 library(igraph) dolphin <- read.csv('dolphins.csv',head=T,fileEncoding='UTF-8',stringsAsFactors=F) g <- graph.data.frame(dolphin) jpeg(filename='dolphins.jpg',width=800,height=800,units='px') plot(g, ver

[控件] 画饼状图的控件

画饼状图的控件   效果 注意:支持遮罩效果   源码 https://github.com/YouXianMing/UI-Component-Collection // // CircleView.h // YXMWeather // // Created by XianMingYou on 15/5/12. // Copyright (c) 2015年 XianMingYou. All rights reserved. // #import <UIKit/UIKit.h> @interfa

画产品原型图和思维导图:Mindjet for iPad

文章描述:产品经理的移动好帮手-Mindjet for iPad. 对于产品经理而言,画产品的原型图和思维导图是日常最常见的工作,思维导图不仅可以明确产品的逻辑和结构关系,也可以成为生活中记录想法的好工具,所以如果能够随时随地随手可以画思维导图一定是一件让人欣喜的事情.当然PC上我们可以使用Mindjet MindManager 来绘制,但是现在iOS设备上也可以轻松画思维导图了,无论使用iPhone抑或iPad,都可以使用Mindjet来随时随地记录你的灵感,当然首推的还是Mindjet fo

matble中如何读取dat并画二维图

问题描述 matble中如何读取dat并画二维图 我在网站下载了一个dat文件,用matble如何编程画二维图啊,求解 解决方案 一般的MATLAB丛书中会有介绍的吧 解决方案二: 数据读取load('case1area.dat');A1=case1area;

uml-使用Enterprise Architect 工具画的类图和时序图如何导出成图片格式?

问题描述 使用Enterprise Architect 工具画的类图和时序图如何导出成图片格式? 最近尝试使用EA画类图.包图.时序图什么的,但是死活找不到如何导出图片,请使用过的小伙伴指点一下. 解决方案 Diagram -> Save as Image 解决方案二: 虽然晚了,不过总会有人问的:点击图标--->另存为图片 解决方案三: 如果是往word里放的话 直接ctrl+C ctrl+V 就阔以啦 囧--