而我这次做的是趋势图,涉及到动态刷新,做的过程还是花了一番功夫的,也补充和巩固了一点js的知识,为了纪念,把过程记录一下:

首先,是引入HIghcharts绘图相关的js文件和jQuery.js。

接下来,把HIghcharts动态刷新的格式拷贝并作修改:

$(function(){
$(document).ready(function() {
Highcharts.setOptions({
global: {
useUTC: false//是否使用世界标准时间 }
});
var chart;
chart = new Highcharts.Chart({
chart: {
renderTo: 'container',
type: 'spline',
marginRight: 10,
events: {
load: function() {
var series = this.series;
setInterval(function() {
var result = reload();
var x = result.time;
for(var i=0; i<series.length; i++) {
var y = result.y[i];
series[i].addPoint([x, y], true, true);
}
}, 1000*5);
}
}
},
title: {
text: 'ssssss' },
xAxis: {
type: 'datetime',
tickPixelInterval: 150 },
yAxis: {
title: {
text: 'Value' },
plotLines: [{
value: 0,
width: 1,
color: '#808080' }]
},
tooltip: {
formatter: function () { return '<b>' + this.series.name + '</b><br/>' +
Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', this.x) + '<br/>' +
Highcharts.numberFormat(this.y, 2);
}
},
//图例属性 legend: {
layout: 'vertical',
align: 'right',
verticalAlign: 'top',
borderWidth: 0 },
exporting: {
enabled: false },
series: create()
});
});
});

重点是chart里面的event属性,series属性。注意,此时:series属性是一个js函数的返回值,需用“js函数名()”来取得。

而demo里面,series是这样的:

series: [{
name: 'Random data',
data: (function() {
// generate an array of random data var data = [],
time = (new Date()).getTime(),
i;
for (i = -19; i <= 0; i++) {
data.push({
x: time + i * 1000,
y: Math.random()
});
}
return data;
})()
}]

这是死数据,并且只显示一条曲线(或折线)。我们需要得到后台数据,并且x,y的值都需要由后台决定。

create()方法的定义如下:

function create() {    var series = new Array();
$.ajax({
type: "POST",
url: "xxxx/yyyyy.json",
async: false, //表示同步,如果要得到ajax处理完后台数据后的返回值,最好这样设置 success: function(result){
var channels = result.key;
var size = channels.length;
for(var i=0; i<size; i++) {
var name = channels[i].yyyy;
var perTotalCnt = channels[i].xxxx;
var data = function() {
var data = [],
time = result.time,
i;
for(i=-6; i<=0; i++) {
data.push({
x: aaaa,
y: zzzz
});
}
return data;
}();
series.push({"name": name, "data": data});
}
}
}, false); //false表示“遮罩”,前台不显示“请稍后”进度提示 alert(series);
return series;
}

其中, series.push({"name": name, "data": data});这一行就是在往series数组[]中push数据,从而生成格式中需要的series数组;

而这一部分:

events: {
load: function() {
var series = this.series;
setInterval(function() {
var result = reload();
var x = result.time;
for(var i=0; i<series.length; i++) {
var y = result.y[i];
series[i].addPoint([x, y], true, true);
}
}, 1000*5);
}
}

则是每隔一段时间(1000*5=5s)刷新页面数据,并且通过循环生成多条"曲线"。其中reload()也是一个js函数的返回值:注:定义json对象的方法var json = {"key1": value1, "key2":value2} (reload方法就不贴了,也是通过ajax请求后台,得到相应数据并且处理相应数据后,放到一个数据结构或json对象中)。

效果:

画图完毕。

最新文章

  1. mysql 学习笔记 第二天
  2. 三、jQuery--jQuery基础--jQuery基础课程--第12章 jQuery在线聊天室
  3. 百科编辑器ueditor应用笔记
  4. 2016年10月25日 星期二 --出埃及记 Exodus 19:9
  5. connect to tomcat with JMX
  6. 在任务计划程序用Bat命令执行exe程序
  7. 学习iOS开发的前言
  8. poj3320 (尺取法)
  9. JAVA BASE64
  10. Dynamics CRM2013 更新用户数据主要电子邮件字段报数据加密错误
  11. 一个真实的Async/Await示例
  12. 使用python调用淘宝的ip地址库查询接口结合zabbix判断dnspod域名解析是否正确
  13. Burp Scanner Report
  14. Linux下安装jieba
  15. Maven - 实例-1-手工创建Maven项目
  16. Expm 1_3 数组中逆序对个数问题
  17. Rails中实现批量删除
  18. Tensorflow 实战Google深度学习框架 第五章 5.2.1Minister数字识别 源代码
  19. 动态规划 HDU1231-------最大连续子序列
  20. liunx less 命令

热门文章

  1. CentOS中安装JDK与Intellij idea
  2. WCF实现RESTFul Web Service
  3. Genral log(普通日志)与 Slow log(慢速日式)
  4. zeroclipboard解决跨域问题
  5. 不错的网络协议栈測试工具 — Packetdrill
  6. XCode5中新建工程后强制使用了ARC,如何去掉?
  7. Phonegap创建项目语法
  8. 0073 javacTask: 源发行版 1.8 需要目标发行版 1.8
  9. loadrunner录制成功但脚本内容为空,无任何代码//脚本中包含乱码
  10. LVM简介