From 69bab28114c2934dbdac799c8ca5abcd92bab22a Mon Sep 17 00:00:00 2001 From: Quyk4tvoj <116157770@qq.com> Date: Fri, 28 May 2021 23:24:50 +0800 Subject: [PATCH] jquery.easy-pie-chart.js --- static/js/jquery.easy-pie-chart.js | 169 +++++++++++++++++++++++++++++ 1 file changed, 169 insertions(+) create mode 100644 static/js/jquery.easy-pie-chart.js diff --git a/static/js/jquery.easy-pie-chart.js b/static/js/jquery.easy-pie-chart.js new file mode 100644 index 0000000..795b4d8 --- /dev/null +++ b/static/js/jquery.easy-pie-chart.js @@ -0,0 +1,169 @@ +// Generated by CoffeeScript 1.3.3 + +/* +Easy pie chart is a jquery plugin to display simple animated pie charts for only one value + +Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) +and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses. + +Built on top of the jQuery library (http://jquery.com) + +@source: http://github.com/rendro/easy-pie-chart/ +@autor: Robert Fleischmann +@version: 1.0.1 + +Inspired by: http://dribbble.com/shots/631074-Simple-Pie-Charts-II?list=popular&offset=210 +Thanks to Philip Thrasher for the jquery plugin boilerplate for coffee script +*/ + + +(function() { + + (function($) { + $.easyPieChart = function(el, options) { + var addScaleLine, animateLine, drawLine, easeInOutQuad, renderBackground, renderScale, renderTrack, + _this = this; + this.el = el; + this.$el = $(el); + this.$el.data("easyPieChart", this); + this.init = function() { + var percent; + _this.options = $.extend({}, $.easyPieChart.defaultOptions, options); + percent = parseInt(_this.$el.data('percent'), 10); + _this.percentage = 0; + _this.canvas = $("").get(0); + _this.$el.append(_this.canvas); + if (typeof G_vmlCanvasManager !== "undefined" && G_vmlCanvasManager !== null) { + G_vmlCanvasManager.initElement(_this.canvas); + } + _this.ctx = _this.canvas.getContext('2d'); + _this.ctx.translate(_this.options.size / 2, _this.options.size / 2); + _this.$el.addClass('easyPieChart'); + _this.$el.css({ + width: _this.options.size, + height: _this.options.size, + lineHeight: "" + _this.options.size + "px" + }); + _this.update(percent); + return _this; + }; + this.update = function(percent) { + if (_this.options.animate === false) { + return drawLine(percent); + } else { + return animateLine(_this.percentage, percent); + } + }; + renderScale = function() { + var i, _i, _results; + _this.ctx.fillStyle = _this.options.scaleColor; + _this.ctx.lineWidth = 1; + _results = []; + for (i = _i = 0; _i <= 24; i = ++_i) { + _results.push(addScaleLine(i)); + } + return _results; + }; + addScaleLine = function(i) { + var offset; + offset = i % 6 === 0 ? 0 : _this.options.size * 0.017; + _this.ctx.save(); + _this.ctx.rotate(i * Math.PI / 12); + _this.ctx.fillRect(_this.options.size / 2 - offset, 0, -_this.options.size * 0.05 + offset, 1); + return _this.ctx.restore(); + }; + renderTrack = function() { + var offset; + offset = _this.options.size / 2 - _this.options.lineWidth / 2; + if (_this.options.scaleColor !== false) { + offset -= _this.options.size * 0.08; + } + _this.ctx.beginPath(); + _this.ctx.arc(0, 0, offset, 0, Math.PI * 2, true); + _this.ctx.closePath(); + _this.ctx.strokeStyle = _this.options.trackColor; + _this.ctx.lineWidth = _this.options.lineWidth; + return _this.ctx.stroke(); + }; + renderBackground = function() { + if (_this.options.scaleColor !== false) { + renderScale(); + } + if (_this.options.trackColor !== false) { + return renderTrack(); + } + }; + drawLine = function(percent) { + var offset; + renderBackground(); + _this.ctx.strokeStyle = $.isFunction(_this.options.barColor) ? _this.options.barColor(percent) : _this.options.barColor; + _this.ctx.lineCap = _this.options.lineCap; + offset = _this.options.size / 2 - _this.options.lineWidth / 2; + if (_this.options.scaleColor !== false) { + offset -= _this.options.size * 0.08; + } + _this.ctx.save(); + _this.ctx.rotate(-Math.PI / 2); + _this.ctx.beginPath(); + _this.ctx.arc(0, 0, offset, 0, Math.PI * 2 * percent / 100, false); + _this.ctx.stroke(); + return _this.ctx.restore(); + }; + animateLine = function(from, to) { + var currentStep, fps, steps; + fps = 30; + steps = fps * _this.options.animate / 1000; + currentStep = 0; + _this.options.onStart.call(_this); + _this.percentage = to; + if (_this.animation) { + clearInterval(_this.animation); + _this.animation = false; + } + return _this.animation = setInterval(function() { + _this.ctx.clearRect(-_this.options.size / 2, -_this.options.size / 2, _this.options.size, _this.options.size); + renderBackground.call(_this); + drawLine.call(_this, [easeInOutQuad(currentStep, from, to - from, steps)]); + currentStep++; + if ((currentStep / steps) > 1) { + clearInterval(_this.animation); + _this.animation = false; + return _this.options.onStop.call(_this); + } + }, 1000 / fps); + }; + easeInOutQuad = function(t, b, c, d) { + t /= d / 2; + if (t < 1) { + return c / 2 * t * t + b; + } else { + return -c / 2 * ((--t) * (t - 2) - 1) + b; + } + }; + return this.init(); + }; + //修改饼图大小 + $.easyPieChart.defaultOptions = { + barColor: '#00ff00', + trackColor: '#f2f2f2', + scaleColor: '#ffffff', + lineCap: 'round', + size: 80, + lineWidth: 2, + animate: false, + onStart: $.noop, + onStop: $.noop + }; + $.fn.easyPieChart = function(options) { + return $.each(this, function(i, el) { + var $el; + $el = $(el); + if (!$el.data('easyPieChart')) { + return $el.data('easyPieChart', new $.easyPieChart(el, options)); + } + }); + }; + return void 0; + })(jQuery); + +}).call(this);