最近的项目需要实现折线图和圆饼图,研究了highcharts一段时间后,成功的实现了这两个图的显示方法。本文只讨论折线图的实现方式。前端采用layui,jquery,html5等技术,后端采用ssm框架。本次只是演示,故后端只在controller层中添加假数据,并没有访问mybatis层。
现在开始贴代码:
<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" href="statics/layui/css/layui.css" media="all">
<script src="statics/layui/layui.js" type="text/javascript"></script>
<!--Highcharts从4.2.0开始,已经不依赖jQuery,如果你的页面中不需要 jQuery,那么无需引入-->
<script src="statics/Highcharts-4.2.6/js/highcharts.js"></script>
<script src="statics/Highcharts-4.2.6/js/highcharts-more.js"></script>
<script src="statics/Highcharts-4.2.6/js/modules/exporting.js"></script>
</head>
<body>
<div style="margin: 15px">
<blockquote class="layui-elem-quote">
<div class="layui-btn-group demoTable" style="float: left">
<button class="layui-btn layui-btn-normal" data-type="importExcel" name="uploadExcel" id="uploadExcel" style="margin-left: 10px!important;">批量导入</button>
</div>
<div class="demoTable" style="float: right">
搜索:
<div class="layui-inline">
<input class="layui-input" name="Name" id="demoReload" placeholder="请输入XXX" autocomplete="off">
</div>
<button class="layui-btn" data-type="reload"><i class="layui-icon"></i>搜索</button>
</div>
<div style="clear: both"></div>
</blockquote>
</div>
<div id="container" style="min-width:400px;height:400px"></div>
其中不要忘了导入相应的js文件,highcharts从4.2.0版本开始不再需要导入jquery。然后就是container容器,用来在之后存放折线图的。
下面是js部分
<script type="text/javascript">
layui.use(['form','layer','layedit','laydate','upload','table'],function() {
var form = layui.form;
layer = parent.layer === undefined ? layui.layer : top.layer,
laypage = layui.laypage,
upload = layui.upload,
layedit = layui.layedit,
laydate = layui.laydate,
$ = layui.jquery,
table = layui.table;
var myDate=new Date;//用来动态显示当前年份
var zhexianData=[];//定义为数组类型,用来存放折线图的数据
$(document).ready(function () {
$.ajax({
type: "GET",
url: 'dataShow/queryZhexian',//提供数据的Servlet
success: function (data) {
//迭代,把异步获取的数据放到数组中
$.each(data, function (i,d) {//遍历处理data,可以是数组、DOM、json等,取决于直接给定或者ajax返回的类型
zhexianData.push(d);
});
chart.series[0].setData(zhexianData);
},
error: function (e) {
alert(e);
}
});
});
var chart = Highcharts.chart('container', {
chart: {
type: 'line'
},
title: {
text: '每个月营业额'
},
subtitle: {
text: '数据来源: WorldClimate.com'
},
xAxis: {
categories: [ '八月', '九月', '十月', '十一月', '十二月','一月', '二月', '三月', '四月', '五月', '六月', '七月']
},
yAxis: {
title: {
text: '金额(元)'
}
},
plotOptions: {
line: {
dataLabels: {
// 开启数据标签
enabled: true
},
// 关闭鼠标跟踪,对应的提示框、点击事件会失效
enableMouseTracking: false
}
},
series: [
{
name:myDate.getFullYear()+"年",//获取当前年份
data:zhexianData //数据部分
}
]
});
});
</script>
下面是后端代码:
@RequestMapping(value="/queryZhexian",method = RequestMethod.GET)
@ResponseBody
public int [] queryZhexian(){//返回数组类型
int [] z=new int [12];
int turnover=0;
int k=0;
for(int i=0;i<12;i++){//产生假数据
turnover+=5000;
z[k++]=turnover;
}
return z;
}
最后是实现出来的结果