-
Notifications
You must be signed in to change notification settings - Fork 108
/
ra.js
1 lines (1 loc) · 6.3 KB
/
ra.js
1
!function(a){var b=Function("return this")()||eval("this");"function"==typeof define&&define.amd?define(["jquery"],function(t){return b.radialIndicator=a(t,b)}):"object"==typeof module&&module.exports?module.exports=b.document?a(require("jquery"),b):function(t){if(!t.document)throw new Error("radialIndiactor requires a window with a document");return a(require("jquery")(t),t)}:b.radialIndicator=a(b.jQuery,b)}(function(n,t,P){var e,i,u=t.document,L=2*Math.PI,j=Math.PI/2,r=(e=u.createElement("canvas").getContext("2d"),i=(t.devicePixelRatio||1)/(e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||e.backingStorePixelRatio||1),function(t,e,n){var r=n||u.createElement("canvas");return r.width=t*i,r.height=e*i,r.style.width=t+"px",r.style.height=e+"px",r.getContext("2d").setTransform(i,0,0,i,0,0),r});function q(t){t=t.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,function(t,e,n,r){return e+e+n+n+r+r});var e=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return e?[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]:null}function R(t,e,n,r){return Math.round(n+(r-n)*t/e)}function l(t,e){for(var n=e.toString().split(new RegExp("(-?[0-9])","g")).filter(function(t){return""!==t}).reverse(),r=t.split("").reverse(),i=0,a=0,o=r.length;i<o&&n.length;i++)"#"===r[i]&&(r[a=i]=n.shift());return r.splice(a+1,r.lastIndexOf("#")-a,n.reverse().join("")),r.reverse().join("")}function a(t,h){var d=this;h=function(){for(var t=arguments,e=t[0],n=1,r=t.length;n<r;n++){var i=t[n];for(var a in i)Object.prototype.hasOwnProperty.call(i,a)&&(e[a]=i[a])}return e}({},s.defaults,h=h||{}),this.indOption=h,"string"==typeof t&&(t=u.querySelector(t)),t.length&&(t=t[0]),this.container=t;var o=u.createElement("canvas");t.appendChild(o),this.canElm=o,this.ctx=o.getContext("2d"),this.current_value=h.initValue||h.minValue||0;function e(t){if(h.interaction){function e(t){t.preventDefault();var e=t.clientX||t.touches[0].clientX,n=t.clientY||t.touches[0].clientY,r=(L+j+Math.atan2(n-s,e-c))%(L+.0175),i=h.radius-1+h.barWidth/2,a=L*i,o=null!=h.precision?h.precision:0,u=Math.pow(10,o),l=Math.round(u*r*i*(h.maxValue-h.minValue)/a)/u;d.value(l)}var n="touchstart"===t.type?"touchmove":"mousemove",r="touchstart"===t.type?"touchend":"mouseup",i=o.getBoundingClientRect(),s=i.top+o.offsetHeight/2,c=i.left+o.offsetWidth/2,a=function(){u.removeEventListener(n,e,!1),u.removeEventListener(r,a,!1)};u.addEventListener(n,e,!1),u.addEventListener(r,a,!1)}}function n(t){if(h.interaction){t.preventDefault();var e=-Math.max(-1,Math.min(1,t.wheelDelta||-t.detail)),n=null!=h.precision?h.precision:0,r=Math.pow(10,n),i=h.maxValue-h.minValue,a=d.current_value+Math.round(r*e*i/Math.min(i,100))/r;return d.value(a),!1}}o.addEventListener("touchstart",e,!1),o.addEventListener("mousedown",e,!1),o.addEventListener("mousewheel",n,!1),o.addEventListener("DOMMouseScroll",n,!1)}function s(t,e){var n=new a(t,e);return n._init(),n}return s.defaults={reverse:!(a.prototype={constructor:s,_init:function(){var t=this.indOption,e=this.canElm,n=2*(t.radius+t.barWidth);return this.formatter="function"==typeof t.format?t.format:function(a,o){return function(t){if(!a||0===a.length)return t.toFixed(o).toString();var e=a.split("."),n=1<e.length?e[1].replace(/[^#]/g,"").length:0,r=t||0;if(a.includes(".")){var i=(r=parseFloat(r).toFixed(n)).toString().split(".");return l(e[0],parseFloat(i[0]).toFixed(0))+"."+l(e[1],i[1])}return l(a,parseFloat(r).toFixed(0))}}(t.format),this.maxLength=t.percentage?4:this.formatter(t.maxValue).length,r(n,n,e),this._drawBarBg(),this.value(this.current_value),this},_drawBarBg:function(){var t=this.indOption,e=this.ctx,n=2*(t.radius+t.barWidth)/2;e.strokeStyle=t.barBgColor,e.lineWidth=t.barWidth,"transparent"!==t.barBgColor&&(e.beginPath(),e.arc(n,n,t.radius-1+t.barWidth/2,0,2*Math.PI),e.stroke())},value:function(t){if(t===P||isNaN(t))return this.current_value;t=parseFloat(t);var e=this.ctx,n=this.indOption,r=2*(n.radius+n.barWidth),i=n.minValue,a=n.maxValue,o=r/2,u=n.barColor;t=t<i?i:a<t?a:t;var l,s,c,h,d,f,m,p,v,g,x,b=null!=n.precision?n.precision:0,y=Math.pow(10,b),C=(t-i)*y/(a-i)*100/y,w=n.percentage?C.toFixed(b)+"%":this.formatter(t,b);if(this.current_value=t,e.clearRect(0,0,r,r),this._drawBarBg(),"object"==typeof u)for(var B=Object.keys(u),M=1,S=B.length;M<S;M++){var _=B[M-1],E=B[M],F=u[_],O=u[E],V=void 0;if(!1!==(V=t.toString()===_?F:t.toString()===E?O:_<t&&t<E&&(n.interpolate?(l=t,s=_,c=E,h=F,void 0,f=-1!==(d=O).indexOf("#")?q(d):d.match(/\d+/g),m=-1!==h.indexOf("#")?q(h):h.match(/\d+/g),p=c-s,v=l-s,f&&m?"rgb("+R(v,p,m[0],f[0])+","+R(v,p,m[1],f[1])+","+R(v,p,m[2],f[2])+")":null):O))){u=V;break}}if(e.strokeStyle=u,n.roundCorner&&(e.lineCap="round"),e.beginPath(),x=n.reverse?(g=L*((100-C)/100)-j,-j-1e-5):(g=-j,L*C/100-j),e.arc(o,o,n.radius-1+n.barWidth/2,g,x,!1),e.stroke(),n.displayNumber){var I=e.font.split(" "),W=n.fontWeight,k=n.fontSize||r/(this.maxLength-(Math.floor(1.4*this.maxLength/4)-1));I=n.fontFamily||I[I.length-1],e.fillStyle=n.fontColor||u,e.font=W+" "+k+"px "+I,e.textAlign="center",e.textBaseline=n.textBaseline,e.fillText(w,o,o)}return n.onChange.call(this.container,t),this},animate:function(i,t){var a,o=this,u=this.indOption,l=this.current_value,s=this,e=u.minValue,n=u.maxValue,r=u.frameNum||(u.percentage?100:500),c=this.current_value,h=(i=i<e?e:n<i?n:i)<c,d=Math.abs(this.current_value-i),f=Math.abs(n-e),m=d/f,p=t||u.duration*m||u.frameTime*r*m,v=function(t){var e=t-(a=a||t),n=e/p,r=d*u.easing(n);c=h?l-r:l+r,o.value(c),p<=e?(o.value(i),cancelAnimationFrame(v),u.onAnimationComplete&&u.onAnimationComplete(s.current_value)):requestAnimationFrame(v)};return requestAnimationFrame(v),this},option:function(t,e){if(e===P)return this.option[t];-1!==["radius","barWidth","barBgColor","format","maxValue","percentage"].indexOf(t)&&(this.indOption[t]=e,this._init().value(this.current_value)),this.indOption[t]=e}}),radius:50,barWidth:5,barBgColor:"#eeeeee",barColor:"#99CC33",format:null,duration:null,frameTime:10,frameNum:null,fontColor:null,fontFamily:null,fontWeight:"bold",fontSize:null,textBaseline:"middle",interpolate:!0,percentage:!1,precision:null,displayNumber:!0,roundCorner:!1,minValue:0,maxValue:100,initValue:0,interaction:!1,easing:function(t){return t},onChange:function(){}},t.radialIndicator=s,n&&(n.fn.radialIndicator=function(e){return this.each(function(){var t=s(this,e);n.data(this,"radialIndicator",t)})}),s});