玩转Highcharts图表库系列(三) 给曲线加上点击事件

一般来说,曲线反应的是某个属性在一段时间内的波动变化。在Highchart曲线图上,把鼠标放到曲线上,那么随着鼠标的移动,该属性值也会显示出来方便查看。但是如果这个属性是一个复合属性,它还有更细致的组成部分需要被详细读出,那么最便捷的操作就是在曲线的这个点上进行点击操作了。

这个曲线是对总用电功率的分时展示,点击其中的任何点,都会更新一个弹出窗口,在弹出窗口里显示该点时刻用电功率排名前三的房间。

玩转Highcharts图表库系列(三) 给曲线加上点击事件_第1张图片

在Highcharts里添加这样的点击操作是设置Event字段属性,代码如下:

plotOptions: {
                    spline: {
                        allowPointSelect: true,
                        cursor: 'pointer', //鼠标移到图表上时鼠标的样式 
                        enableMouseTracking: true, //鼠标移到图表上时是否显示提示框 
                        events: {//监听点的鼠标事件  
                            click: function () {
                                var x = (event.point.x - (Date.UTC(theYear, theMonth, theDay, 0, 0, 0, 0) + localOffset))/1000;
                                var hour = Math.floor(x / 3600) > 9 ? Math.floor(x / 3600) : '0' + Math.floor(x / 3600);
                                var minute = Math.floor((x % 3600) / 60) > 9 ? Math.floor((x % 3600) / 60) : '0' + Math.floor((x % 3600) / 60);
                                var second = (x % 60) > 9 ? (x % 60) : '0' + (x % 60);
                                var time = hour + ':' + minute + ':' + second;
                                //alert(hour + ':' + minute + ':' + second + ',' + event.point.y);
                                ShowMaxSubValues(time);
                            }
                            //mouseOver:function() {
                        },
                        lineWidth: 2,
                        states: {
                            hover: {
                                lineWidth: 3
                            }
                        },
                        marker: {
                            enabled: false
                        }
                    }
                },

这里获取鼠标点击点对应的X轴时间值,然后调用ShowMaxSubValues()方法。

// 获取某时刻即时功率最大的三个电表名称和数值,供鼠标点击曲线图数值时显示
        function ShowMaxSubValues(time) {
                var date; // 日期

                if (navtab.getSelectedTabItemID() == "tabitem1") { // 实时功率页面,取当前日期
                    date = new Date().format('yyyy-MM-dd');
                } else { // 历史功率Tab2页面,取历史时间
                    date = $("#time").val();
                }
                var parms = "time=" + date + " " + time + ".000"; // 构造datetime
                LG.ajax({
                    type: 'AjaxRealTimePower',
                    method: 'GetMaxValuesAtTime',
                    data: parms,
                    success: function (ajaxData) {
                        var json = ajaxData.topvaluesjson;
                        // 设置浮动框内的内容
                        if ((json != null) && !$('#dragableBox').hasClass("hidden")) {
                            $("#boxName").text(date + " " + time);
                            if (json.length > 0)
                                $("#POWER1").text(json[0].StationName + ' : ' + json[0].py);
                            else
                                $("#POWER1").text("无当日数据");
                            if (json.length > 1)
                                $("#POWER2").text(json[1].StationName + ' : ' + json[1].py);
                            else
                                $("#POWER2").text("");
                            if (json.length > 2)
                                $("#POWER3").text(json[2].StationName + ' : ' + json[2].py);
                            else
                                $("#POWER3").text("");
                        }
                    }
                });
        }

持续更新中。。。

玩转Highcharts图表库系列(一) 显示多条曲线
玩转Highcharts图表库系列(二) 沿X轴设置不同的背景色分辨带
玩转Highcharts图表库系列(三) 给曲线加上点击事件
玩转Highcharts图表库系列(四) 散点图和曲线图的混合显示

你可能感兴趣的:(Web开发)