UNPKG

vislite

Version:

灵活、快速、简单的数据可视化交互式跨端前端库

9 lines 2.9 kB
/*! * PieLayout of VISLite JavaScript Library v1.4.0 * git+https://github.com/oi-contrib/VISLite.git */ function t(t,i){for(var n in t)i[n]=t[n];return i}function i(t,i,n,e,r){var o=Math.cos(n),a=Math.sin(n);return[(e-t)*o-(r-i)*a+t,(e-t)*a+(r-i)*o+i]} /*! * animation of OIPage v1.3.0 * git+https://github.com/oi-contrib/OIPage.git */var n,e=[];var r=function(){function r(i){void 0===i&&(i={}),this.name="PieLayout",this.__option={cx:200,cy:200,radius:[50,100],duration:200},this.__hoverIndex=-1,this.__config=t(i,{name:function(t,i){return t.name},value:function(t,i){return t.value}})}return r.prototype.setOption=function(i){return t(i,this.__option),this},r.prototype.use=function(t,n){void 0===n&&(n=-1);for(var e={count:t.length,cx:this.__option.cx,cy:this.__option.cy,radius:this.__option.radius,hoverIndex:n,node:[]},r=0,o=[],a=[],_=0;_<t.length;_++)o[_]=this.__config.name(t[_],t),a[_]=this.__config.value(t[_],t),r+=a[_];var s,u=-.5*Math.PI;for(_=0;_<t.length;_++){s=a[_]/r*Math.PI*2;var h=[this.__option.radius[0],this.__option.radius[1]*(1+(n===_?.05:0))],c=u+.5*s,d=Math.max(this.__option.radius[0],this.__option.radius[1]),p=i(e.cx,e.cy,c,e.cx+d,e.cy),l=i(e.cx,e.cy,c,e.cx+d+15,e.cy),f=p[0]>e.cx?1:-1,v=[l[0]+20*f,l[1]],x=[l[0]+25*f,l[1]];e.node[_]={value:a[_],name:o[_],beginDeg:u,deg:s,isHover:n===_,radius:h,label:{line:[p,l,v],position:x,align:-1===f?"right":"left"}},u+=s}return e},r.prototype.bind=function(t,i){return this.__rback=i,this.__oralPie=t,this.__prePie=this.use(this.__oralPie,this.__hoverIndex),this.__rback(this.__prePie),this},r.prototype.unbind=function(){return this.__rback=function(){return null},this.__oralPie=null,this.__prePie=null,this.__hoverIndex=-1,this},r.prototype.setHover=function(t){return this.__prePie&&this.__hoverIndex!==t?(this.__hoverIndex=t,this.doUpdate(),this):this},r.prototype.doUpdate=function(){var t=this,i=this.use(this.__oralPie,this.__hoverIndex),r=JSON.parse(JSON.stringify(i));return function(t,i,r){arguments.length<2&&(i=400),arguments.length<3&&(r=function(){});var o={timer:function(t,i,n){if(!t)throw new Error("Tick is required!");var r=(new Date).valueOf()+"_"+(1e3*Math.random()).toFixed(0);return e.push({id:r,createTime:new Date,tick:t,duration:i,callback:n}),o.start(),r},start:function(){n||(n=setInterval(o.tick,13))},tick:function(){var t,i,n,r,a,_,s,u=e;for((e=[]).length=0,i=0;i<u.length;i++)t=(a=u[i]).createTime,n=a.tick,_=a.duration,r=a.callback,n(s=(s=(+(new Date).valueOf()-t.valueOf())/_)>1?1:s),s<1&&a.id?e.push(a):r(s);e.length<=0&&o.stop()},stop:function(){n&&(clearInterval(n),n=null)}},a=o.timer((function(i){t(i)}),i,r)}((function(n){if(t.__prePie)for(var e=0;e<r.count;e++)r.node[e].radius[1]=t.__prePie.node[e].radius[1]+(i.node[e].radius[1]-t.__prePie.node[e].radius[1])*n;t.__rback(r)}),this.__option.duration,(function(){t.__prePie=i,t.__rback(t.__prePie)})),this},r}();export{r as default};