jquery报表组件highchat的使用

之前项目里面的报表组建用的是flash的amchart,非常漂亮,但是有几个缺陷,比如在数据量多的时候,某些提示信息会被flash给遮挡住,导致显示不全。另外部分浏览器没有安装flash的播放插件,导致客户端无法正常显示,另外amchart只支持xml格式的数据,参数等配置都在xml中进行配置的,和java的体系结构有些格格不入。所以后来索性替换成了jquery的一个报表插件highchart。

 

该插件支持各种主流的图表,比如饼图,柱图,线图。支持一些类似amchart的效果,比如动态缩进,动态加载,鼠标悬停提示,提示框等,支持json数据,支持jquery,支持ajax加载。

 

Highcharts 官网: http://www.highcharts.com

Highcharts 官网示例:http://www.highcharts.com/demo/

Highcharts 官网文档:http://www.highcharts.com/documentation/how-to-use

 

具体使用不多说了很简单的,主要说些小细节。

 

封装的js调用方法。

(function($){
	$.fn.extend({
		columnChart : function(option){
			var defaultOption = {
					url:'',
					moduleName:''
			};

			$.extend(defaultOption,option);
			
			var chartOptions = {
					chart: {
						renderTo: $(this).attr('id'),
						defaultSeriesType: 'column'
					},
					title: {
						text: ''
					},
					xAxis: {
						categories:[]
					},
					yAxis: {
						allowDecimals: false,
						min: 0,
						title: {
							text: ''
						}
					},
					legend: {
						align: 'right',
						x: -100,
						verticalAlign: 'top',
						y: 20,
						floating: true,
						backgroundColor: '#FFFFFF',
						borderColor: '#CCCCCC',
						borderWidth: 1,
						shadow: true
					},
					tooltip: {
						formatter: function() {
							return '<b>'+ this.x +'</b><br/>'+
								 this.series.name +': '+ this.y +'<br/>'+
								 defaultOption.moduleName+'总数量: '+ this.point.stackTotal;
						}
					},
					plotOptions: {
						column: {
							stacking: 'normal'
						}
					},
				    series: []
			};
			
			$.get(defaultOption.url, function(data) {
				var moduleName='';
				
				if(defaultOption.moduleName != ''){
					moduleName = defaultOption.moduleName;
				}else{
					moduleName = data.moduleName;
				}
				
				chartOptions.title.text = moduleName+'柱状图';
				chartOptions.yAxis.title.text = moduleName;

				chartOptions.xAxis.categories = data.categories;
				chartOptions.series = data.series;
			    
			    new Highcharts.Chart(chartOptions);
			});
		}
	})
	
	$.fn.extend({
		pieChart : function(option){
			var defaultOption = {
				url:"",
				moduleName:""
			};
			
			$.extend(defaultOption, option);
			
			var chartOptions = {
				chart: {
			    	renderTo: $(this).attr('id'),
			        plotBackgroundColor: null,
			        plotBorderWidth: 2,
			        plotShadow: true
			    },
			    title: {
			        text: defaultOption.moduleName+'饼状图'
			    },
			    tooltip: {
			        formatter: function() {
			    		return '<b>'+ this.point.name +'</b>: '+ this.y +' %';
			        }
			    },
			    plotOptions: {
			        pie: {
			            allowPointSelect: true,
			            cursor: 'pointer',
			            dataLabels: {
			            	enabled: true,
			                formatter: function() {
			                	if(this.y>0)
			    				return '<b>'+ this.point.name +'</b>: '+ this.y +' %';
			                }
			             },
			            showInLegend: true,
					    point: {
					        events : {
					         click : function(){//绑定click事件
					          alert("11111111111");
					         }
					        }
					    }
			         }
			      },
			      series: [{
			    	  type: 'pie',
			    	  name: 'Browser share',
			          data: []
			      }]
			};
			
			
			$.get(defaultOption.url, function(data){
				 chartOptions.series[0].data=data;
				 new Highcharts.Chart(chartOptions);    
			});                        
		}
	});
})(jQuery)

 

后台很简单,用一个javabean组装数据拼装成一个json对象抛出即可。黑色背景色代码表示为饼图添加一个点击的事件,允许做些例外的操作,比如显示详情,或者切换页面等。

 

 

另外highchart支持到处图片或者pdf文件,需要导入几个lib包,最主要的是batik,该包由于升级到1.7,分散成20多个小的lib包,后来用了1.6的,加载几个其他必须的,一共3个lib包。

 

中文乱码问题,通过filter设置编码即可解决。

 

 

 

你可能感兴趣的:(jquery,数据结构,json,Ajax,Flash)