fusioncharts 集成Jquery开发插件

阿三给的fusioncharts在做图标什么的确实方便,由于项目需要,一起谢了个插件。方便使用,就写个简单的DEMO了。

在开发之前的去阿三的官网下载fusioncharts的js了,以前他是基于swf的,现在h5时代了,阿三的牛逼xx的。

开发jquery插件的自然的用闭包了,然后使用的传入实体信息。还得有默认的时的信息。

(function($) {
	/**
	 * 初始化操作
	 */
	function init(dom, options) {
		if(!$(dom).data("options")) {
			$(dom).data("options",options);
		}
		// 填充 label、seriesname数据(数据库查询都是code,需要替换成文本格式)
		$(dom).data("label", options.labelConvertor);
		$(dom).data("seriesname", options.seriesnameConvertor);
		
		if(options.ajaxLabel) { // 替换 label(如果是基于数据库的,那就查库在替换)
			convertMarked(dom, "label", options.ajaxLabel);
		}
		if(options.ajaxSeriesname) { // 替换 seriesname(如果是基于数据库的,那就查库在替换)
			convertMarked(dom, "seriesname", options.ajaxSeriesname);
		}
		
		requestData(dom);
	}
	
	/**
	 * Ajax 获取替换对象
	 */
	function convertMarked(dom, mark, replaceMarks) {
		$.ajax({
			type: "POST",
			url: replaceMarks.url,
			async: true,
			data: replaceMarks.dataParam,
			success: function(data) { // 请求成功或的数据
				$(dom).data(mark, data);
			}
		});
	}
	
	/**
	 * 请求服务器数据
	 */
	function requestData(dom) {
		$(dom).loaders(); // 这个是自己开发的一个loading插件,也是基于css3的
		var options = $(dom).data("options");
		/*$.ajax({// 请求成功或的数据的真实数据,现在是测试阶段就直接上数据了。
			type: "POST",
			url: options.url,
			async: true,
			data: options.dataParam,
			success: function(data) { 
				$(dom).data("dataset", data);
			}
		});*/
		var test ={"categories": [
		                         {
		                             "category": [
		                                 {"label": "Q1"},
		                                 {"label": "Q2"},
		                                 {"label": "Q3"},
		                                 {"label": "Q4"}
		                             ]
		                         }
		                     ],
		                     "dataset": [
		                         {
		                             "seriesname": "Previous Year",
		                             "data": [
		                                 {
		                                     "value": "10000"
		                                 },
		                                 {
		                                     "value": "11500"
		                                 },
		                                 {
		                                     "value": "12500"
		                                 },
		                                 {
		                                     "value": "15000"
		                                 }
		                             ]
		                         },
		                         {
		                             "seriesname": "Current Year",
		                             "data": [
		                                 {
		                                     "value": "25400"
		                                 },
		                                 {
		                                     "value": "29800"
		                                 },
		                                 {
		                                     "value": "21800"
		                                 },
		                                 {
		                                     "value": "26800"
		                                 }
		                             ]
		                         }
		                     ]
		                 }
		
		buildChart(dom, test);
		
	}
	
	function buildChart(dom, data) {
		replaceData(dom, data);
		drawchart(dom);
	}
	
	/**
	 * 转换最终数据
	 */
	function replaceData(dom, data) {
		var labelCon = $(dom).data("label");
		var seriesnameCon = $(dom).data("seriesname");
		var isclick = ($(dom).data("options").clickChart!=null?true:false);
		
		if($.isArray(data)) { // data 数据
			for(var k=0,n=data.length;k<n;k++) {
				if(isclick) {
					console.log($(dom).data("options").clickChart)
					data[k].link = "javascript:"+$(dom).data("options").clickChart+"("+JSON.stringify(data[k])+")";
				}
				if(!$.isEmptyObject(labelCon)) {
					data[k].label = labelCon[data[k].label];
				}
				
			}
			$(dom).data("dataset",{"data": data});
		} else { // 返回对象,需要部分特殊处理
			var labels = data.categories[0].category;
			var ds = data.dataset;
			if(!$.isEmptyObject(seriesnameCon) || isclick) {
				for(var d=0,m=ds.length;d<m;d++) {
					// 添加链接,点击是可以获取点击部分的数据
					if(isclick) {
						var subds = ds[d].data;
						var params = {};
						params.label = labels[d].label;
						params.seriesname = ds[d].seriesname;
						for(var sd=0,r=subds.length;sd<subds.length;sd++) {
							params.value=subds[sd].value;
							subds[sd].link = "javascript:"+$(dom).data("options").clickChart+"("+JSON.stringify(params)+")";
						}
					}
					if(!$.isEmptyObject(seriesnameCon)) {
						ds[d].seriesname=seriesnameCon[ds[d].seriesname]!=null?seriesnameCon[ds[d].seriesname]:ds[d].seriesname;
					}
				}
			}
			if(!$.isEmptyObject(labelCon)) {
				for(var k=0,n=labels.length;k<n;k++) {
					labels[k].label = labelCon[labels[k].label]!=null?labelCon[labels[k].label]:labels[k].label;
				}
			}
			$(dom).data("dataset", data);
		}
	}
	
	/**
	 * 画样式
	 */
	function drawchart(dom) {
		var options = $(dom).data("options");
		var dataSource = $.extend(true,{}, $.fn.easychart.types[options["type"]], $.fn.easychart.types[options["style"]], $(dom).data("dataset"));
		var chartObject = $.extend({}, {type: options["type"]+options["model"], width:$(dom).width(), height:$(dom).height(), dataFormat:options["dataFormat"]},{dataSource:dataSource});
		//console.log(JSON.stringify(chartObject))
		$(dom).insertFusionCharts(chartObject);
		setTimeout(function() {// 删掉loading遮罩
			$(dom).loadersClose();
		}, 1000);
		$("#"+dom.id+" tspan:contains('FusionCharts')").remove(); // 不是免费的玩野在图表下面总有一段话。。直接remove掉
	}
	
	$.fn.easychart = function(options, params) {
		if(typeof options == "string") {
			console.log(options);
			$.fn.easychart.method[options](this ,params);
		} else {
			options = options || {};
			options = $.extend(true, {}, $.fn.easychart.defaults, options);
			return this.each(function() {
				init(this, options);
			});
		}
		
	};
	
	$.fn.easychart.method = {
		reload : function(dom, params) {
			// 删除存储数据,并重新设置
			return dom.each(function() {
				requestData(this);
			});
		},
		// 根据数据查询替换label文本
		ajaxLabel : function(dom, params) {
			convertMarked(dom, "label", options.ajaxLabel);
		},
		// 根据数据查询替换seriesname文本
		ajaxSeriesname: function(dom, params) {
			convertMarked(dom, "seriesname", options.ajaxSeriesname);
		}
	};

	// 展示图表样式,可以自己根据需求添加
	$.fn.easychart.types = {
		column: {
			"chart": {
				"caption": "Monthly revenue for last year",
		        "subCaption": "Harry's SuperMart",
		        "xAxisName": "Month",
		        "yAxisName": "Revenues (In USD)",
		        "numberPrefix": "$",
		        "paletteColors": "#0075c2",
		        "bgColor": "#ffffff",
		        "borderAlpha": "20",
		        "canvasBorderAlpha": "0",
		        "usePlotGradientColor": "0",
		        "plotBorderAlpha": "10",
		        "placevaluesInside": "1",
		        "rotatevalues": "1",
		        "valueFontColor": "#ffffff",
		        "showXAxisLine": "1",
		        "xAxisLineColor": "#999999",
		        "divlineColor": "#999999",
		        "divLineDashed": "1",
		        "showAlternateHGridColor": "0",
		        "subcaptionFontBold": "0",
		        "subcaptionFontSize": "14"
		    }
		},
		area: {
			"chart": {
		        "caption": "Sales of Liquor",
		        "subCaption": "Last week",
		        "xAxisName": "Day",
		        "yAxisName": "Sales (In USD)",
		        "numberPrefix": "$",
		        "paletteColors": "#0075c2",
		        "bgColor": "#ffffff",
		        "showBorder": "0",
		        "showCanvasBorder": "0",
		        "plotBorderAlpha": "10",
		        "usePlotGradientColor": "0",
		        "plotFillAlpha": "50",
		        "showXAxisLine": "1",
		        "axisLineAlpha": "25",
		        "divLineAlpha": "10",
		        "showValues": "1",
		        "showAlternateHGridColor": "0",
		        "captionFontSize": "14",
		        "subcaptionFontSize": "14",
		        "subcaptionFontBold": "0",
		        "toolTipColor": "#ffffff",
		        "toolTipBorderThickness": "0",
		        "toolTipBgColor": "#000000",
		        "toolTipBgAlpha": "80",
		        "toolTipBorderRadius": "2",
		        "toolTipPadding": "5"
		    }
		},
		mscolumn: {
			"chart": {
		        "caption": "Comparison of Quarterly Revenue",
		        "xAxisname": "Quarter",
		        "yAxisName": "Revenues (In USD)",
		        "numberPrefix": "$",
		        "plotFillAlpha": "80",
		        "paletteColors": "#0075c2,#1aaf5d",
		        "baseFontColor": "#333333",
		        "baseFont": "Helvetica Neue,Arial",
		        "captionFontSize": "14",
		        "subcaptionFontSize": "14",
		        "subcaptionFontBold": "0",
		        "showBorder": "0",
		        "bgColor": "#ffffff",
		        "showShadow": "0",
		        "canvasBgColor": "#ffffff",
		        "canvasBorderAlpha": "0",
		        "divlineAlpha": "100",
		        "divlineColor": "#999999",
		        "divlineThickness": "1",
		        "divLineDashed": "1",
		        "divLineDashLen": "1",
		        "divLineGapLen": "1",
		        "usePlotGradientColor": "0",
		        "showplotborder": "0",
		        "valueFontColor": "#ffffff",
		        "placeValuesInside": "1",
		        "showHoverEffect": "1",
		        "rotateValues": "1",
		        "showXAxisLine": "1",
		        "xAxisLineThickness": "1",
		        "xAxisLineColor": "#999999",
		        "showAlternateHGridColor": "0",
		        "legendBgAlpha": "0",
		        "legendBorderAlpha": "0",
		        "legendShadow": "0",
		        "legendItemFontSize": "10",
		        "legendItemFontColor": "#666666"
		    }
		}
		
	}
	// 默认值,请求是需要传入了
	$.fn.easychart.defaults = {
		url: null,                       // 请求的URL地址
		dataParam: null,                 // 请求
		dataFormat:"json",               // 展示数据格式 
		type:"column",                   // fsc类型
		model:"2d",                      // fsc 模型
		ajaxLabel: null,                 // label 替换数据  Ajax
		ajaxSeriesname: null,            // seriesname 替换数据  Ajax
		labelConvertor:{},               // label 替换数据  Object
		seriesnameConvertor: {},         // label 替换数据  Object
		clickChart: null,                // 点击出发事件
		style:{},                        // fcs chart扩展
	};
	
})(jQuery);

以上是插件部分。在使用时(有关根据数据库查询替换的没有测试,可以在项目中指定返回格式一致就可以了):

<pre name="code" class="html"><%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
	String path = request.getContextPath();
%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" href="<%=path%>/css/loaders/loaders.css" type="text/css">
<link rel="stylesheet" href="<%=path%>/css/loaders/loaders.min.css" type="text/css">
<link rel="stylesheet" href="<%=path%>/css/pagination.css" type="text/css">
<link rel="stylesheet" href="<%=path%>/css/iscroll.css" type="text/css">
<script type="text/javascript">
 var _root_path = "<%=path%>";
</script>
<script type="text/javascript" src="<%=path%>/js/jquery-2.1.js"></script>
<script type="text/javascript" src="<%=path%>/js/jquery.loaders.plug.js"></script>
<script type="text/javascript" src="<%=path%>/js/fusioncharts/fusioncharts.js"></script>
<script type="text/javascript" src="<%=path%>/js/fusioncharts/fusioncharts.charts.js"></script>
<script type="text/javascript" src="<%=path%>/js/fusioncharts/fusioncharts.gantt.js"></script>
<script type="text/javascript" src="<%=path%>/js/fusioncharts/fusioncharts.maps.js"></script>
<script type="text/javascript" src="<%=path%>/js/fusioncharts/fusioncharts.powercharts.js"></script>
<script type="text/javascript" src="<%=path%>/js/fusioncharts/fusioncharts.widgets.js"></script>
<script type="text/javascript" src="<%=path%>/js/fusioncharts/fusioncharts.jqueryplugin.js"></script>
<script type="text/javascript" src="<%=path%>/js/jquery.easychart.plug.js"></script>
</head>
<body>
<div id="chart1" style="width:300px;height: 270px"></div>
	
	<div id="chart2" style="width:500px;height: 670px"></div>
	<input type="button" id="b1" value="ceshi111">
</body>
<script type="text/javascript">

	$(function() {
		$("#chart1").easychart({
			clickChart:"clickChart",
			type:"mscolumn",
			labelConvertor:{"Q1":"第一季度","Q2":"第二季度"},
			seriesnameConvertor:{"Previous Year":"同期"},
			model:"2D"
		});
		
		$("#chart2").easychart({
			clickChart:"clickChart",
			type:"mscolumn",
			labelConvertor:{"Q1":"第一季度","Q2":"第二季度"},
			seriesnameConvertor:{"Previous Year":"同期"},
			model:"2D"
		});
		$("#b1").click(function() {
			$("#chart1").easychart("reload");
		});
	});
	
	function clickChart(chartdata) {
		console.log(JSON.stringify(chartdata));
	}
</script>
</html>


 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值