⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chart.js

📁 Hippo CMS是一个以信息为中心的开源内容管理系统。Hippo CMS目标是供中,大型企业来管理其发布在互连网
💻 JS
📖 第 1 页 / 共 2 页
字号:
	this.drawPlotArea();
	this.drawDataGroup();
	this.drawAxes();
	this.domNode.appendChild(this.vectorNode);
	this.assignColors();
	this._isInitialized = true;
}, destroy:function () {
	while (this.domNode.childNodes.length > 0) {
		this.domNode.removeChild(this.domNode.childNodes.item(0));
	}
	this.vectorNode = this.plotArea = this.dataGroup = this.axisGroup = null;
}, render:function () {
	dojo.svg.g.suspend();
	if (this.dataGroup) {
		while (this.dataGroup.childNodes.length > 0) {
			this.dataGroup.removeChild(this.dataGroup.childNodes.item(0));
		}
	} else {
		this.init();
	}
	for (var i = 0; i < this.series.length; i++) {
		dojo.widget.svg.Chart.Plotter.plot(this.series[i], this);
	}
	dojo.svg.g.resume();
}, postCreate:function () {
	var table = this.domNode.getElementsByTagName("table")[0];
	if (table) {
		var ranges = this.parseProperties(table);
		var bRangeX = false;
		var bRangeY = false;
		var axisValues = this.parseData(table);
		if (!bRangeX) {
			this.properties.axes.x.range = {min:axisValues.x.min, max:axisValues.x.max};
		}
		if (!bRangeY) {
			this.properties.axes.y.range = {min:axisValues.y.min, max:axisValues.y.max};
		}
		this.setAxesPlot(table);
		this.domNode.removeChild(table);
	}
	if (this.series.length > 0) {
		this.render();
	}
}});
dojo.widget.svg.Chart.Plotter = new function () {
	var self = this;
	var plotters = {};
	var types = dojo.widget.Chart.PlotTypes;
	this.getX = function (value, chart) {
		var v = parseFloat(value);
		var min = chart.properties.axes.x.range.min;
		var max = chart.properties.axes.x.range.max;
		var ofst = 0 - min;
		min += ofst;
		max += ofst;
		v += ofst;
		var xmin = chart.properties.padding.left;
		var xmax = chart.properties.width - chart.properties.padding.right;
		var x = (v * ((xmax - xmin) / max)) + xmin;
		return x;
	};
	this.getY = function (value, chart) {
		var v = parseFloat(value);
		var max = chart.properties.axes.y.range.max;
		var min = chart.properties.axes.y.range.min;
		var ofst = 0;
		if (min < 0) {
			ofst += Math.abs(min);
		}
		min += ofst;
		max += ofst;
		v += ofst;
		var ymin = chart.properties.height - chart.properties.padding.bottom;
		var ymax = chart.properties.padding.top;
		var y = (((ymin - ymax) / (max - min)) * (max - v)) + ymax;
		return y;
	};
	this.addPlotter = function (name, func) {
		plotters[name] = func;
	};
	this.plot = function (series, chart) {
		if (series.values.length == 0) {
			return;
		}
		if (series.plotType && plotters[series.plotType]) {
			return plotters[series.plotType](series, chart);
		} else {
			if (chart.plotType && plotters[chart.plotType]) {
				return plotters[chart.plotType](series, chart);
			}
		}
	};
	plotters["bar"] = function (series, chart) {
		var space = 1;
		var lastW = 0;
		for (var i = 0; i < series.values.length; i++) {
			var x = self.getX(series.values[i].x, chart);
			var w;
			if (i == series.values.length - 1) {
				w = lastW;
			} else {
				w = self.getX(series.values[i + 1].x, chart) - x - space;
				lastW = w;
			}
			x -= (w / 2);
			var yA = self.getY(chart.properties.axes.x.plotAt, chart);
			var y = self.getY(series.values[i].value, chart);
			var h = Math.abs(yA - y);
			if (parseFloat(series.values[i].value) < chart.properties.axes.x.plotAt) {
				var oy = yA;
				yA = y;
				y = oy;
			}
			var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
			bar.setAttribute("fill", series.color);
			bar.setAttribute("title", series.label + ": " + series.values[i].value);
			bar.setAttribute("stroke-width", "0");
			bar.setAttribute("x", x);
			bar.setAttribute("y", y);
			bar.setAttribute("width", w);
			bar.setAttribute("height", h);
			bar.setAttribute("fill-opacity", "0.9");
			chart.dataGroup.appendChild(bar);
		}
	};
	plotters["line"] = function (series, chart) {
		var tension = 1.5;
		var line = document.createElementNS(dojo.svg.xmlns.svg, "path");
		line.setAttribute("fill", "none");
		line.setAttribute("stroke", series.color);
		line.setAttribute("stroke-width", "2");
		line.setAttribute("stroke-opacity", "0.85");
		line.setAttribute("title", series.label);
		chart.dataGroup.appendChild(line);
		var path = [];
		for (var i = 0; i < series.values.length; i++) {
			var x = self.getX(series.values[i].x, chart);
			var y = self.getY(series.values[i].value, chart);
			var dx = chart.properties.padding.left + 1;
			var dy = chart.properties.height - chart.properties.padding.bottom;
			if (i > 0) {
				dx = x - self.getX(series.values[i - 1].x, chart);
				dy = self.getY(series.values[i - 1].value, chart);
			}
			if (i == 0) {
				path.push("M");
			} else {
				path.push("C");
				var cx = x - (tension - 1) * (dx / tension);
				path.push(cx + "," + dy);
				cx = x - (dx / tension);
				path.push(cx + "," + y);
			}
			path.push(x + "," + y);
		}
		line.setAttribute("d", path.join(" "));
	};
	plotters["area"] = function (series, chart) {
		var tension = 1.5;
		var line = document.createElementNS(dojo.svg.xmlns.svg, "path");
		line.setAttribute("fill", series.color);
		line.setAttribute("fill-opacity", "0.4");
		line.setAttribute("stroke", series.color);
		line.setAttribute("stroke-width", "1");
		line.setAttribute("stroke-opacity", "0.8");
		line.setAttribute("title", series.label);
		chart.dataGroup.appendChild(line);
		var path = [];
		for (var i = 0; i < series.values.length; i++) {
			var x = self.getX(series.values[i].x, chart);
			var y = self.getY(series.values[i].value, chart);
			var dx = chart.properties.padding.left + 1;
			var dy = chart.properties.height - chart.properties.padding.bottom;
			if (i > 0) {
				dx = x - self.getX(series.values[i - 1].x, chart);
				dy = self.getY(series.values[i - 1].value, chart);
			}
			if (i == 0) {
				path.push("M");
			} else {
				path.push("C");
				var cx = x - (tension - 1) * (dx / tension);
				path.push(cx + "," + dy);
				cx = x - (dx / tension);
				path.push(cx + "," + y);
			}
			path.push(x + "," + y);
		}
		path.push("L");
		path.push(x + "," + self.getY(0, chart));
		path.push("L");
		path.push(self.getX(0, chart) + "," + self.getY(0, chart));
		path.push("Z");
		line.setAttribute("d", path.join(" "));
	}, plotters["scatter"] = function (series, chart) {
		var r = 7;
		for (var i = 0; i < series.values.length; i++) {
			var x = self.getX(series.values[i].x, chart);
			var y = self.getY(series.values[i].value, chart);
			var point = document.createElementNS(dojo.svg.xmlns.svg, "path");
			point.setAttribute("fill", series.color);
			point.setAttribute("stroke-width", "0");
			point.setAttribute("title", series.label + ": " + series.values[i].value);
			point.setAttribute("d", "M " + x + "," + (y - r) + " " + "Q " + x + "," + y + " " + (x + r) + "," + y + " " + "Q " + x + "," + y + " " + x + "," + (y + r) + " " + "Q " + x + "," + y + " " + (x - r) + "," + y + " " + "Q " + x + "," + y + " " + x + "," + (y - r) + " " + "Z");
			chart.dataGroup.appendChild(point);
		}
	};
	plotters["bubble"] = function (series, chart) {
		var minR = 1;
		var min = chart.properties.axes.x.range.min;
		var max = chart.properties.axes.x.range.max;
		var ofst = 0 - min;
		min += ofst;
		max += ofst;
		var xmin = chart.properties.padding.left;
		var xmax = chart.properties.width - chart.properties.padding.right;
		var factor = (max - min) / (xmax - xmin) * 25;
		for (var i = 0; i < series.values.length; i++) {
			var size = series.values[i].size;
			if (isNaN(parseFloat(size))) {
				size = minR;
			}
			var point = document.createElementNS(dojo.svg.xmlns.svg, "circle");
			point.setAttribute("stroke-width", 0);
			point.setAttribute("fill", series.color);
			point.setAttribute("fill-opacity", "0.8");
			point.setAttribute("r", (parseFloat(size) * factor) / 2);
			point.setAttribute("cx", self.getX(series.values[i].x, chart));
			point.setAttribute("cy", self.getY(series.values[i].value, chart));
			point.setAttribute("title", series.label + ": " + series.values[i].value + " (" + size + ")");
			chart.dataGroup.appendChild(point);
		}
	};
}();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -