UNPKG

vislite

Version:

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

1 lines 1.52 kB
let e,t=[],i=13;function n(n,a,u){return function(n,a,u){arguments.length<2&&(a=400),arguments.length<3&&(u=function(){});let r={timer:function(e,i,n){if(!e)throw new Error("Tick is required!");let a=(new Date).valueOf()+"_"+(1e3*Math.random()).toFixed(0);return t.push({id:a,createTime:new Date,pauseTime:-1,pauseKeepTime:0,status:"running",tick:e,duration:i,callback:n}),r.start(),a},start:function(){if(!e)try{e=globalThis&&globalThis.requestAnimationFrame?globalThis.requestAnimationFrame((function t(){r.tick(),e&&(e=globalThis.requestAnimationFrame(t))})):setInterval(r.tick,i)}catch(t){e=setInterval(r.tick,i)}},tick:function(){let e,i,n,a,u,s,l,o=t;for(t=[],t.length=0,i=0;i<o.length;i++)u=o[i],e=u.createTime,n=u.tick,s=u.duration,a=u.callback,l=(+(new Date).valueOf()-e.valueOf()-u.pauseKeepTime)/s,l=l>1?1:l,"running"===u.status&&n(l),(l<1||"paused"===u.status)&&u.id?t.push(u):a(l);t.length<=0&&r.stop()},stop:function(){if(e){try{globalThis&&globalThis.requestAnimationFrame?globalThis.cancelAnimationFrame(e):clearInterval(e)}catch(t){clearInterval(e)}e=null}}},s=r.timer((function(e){n(e)}),a,u);return{stop:function(){for(let e in t)t[e].id==s&&(t[e].id=void 0)},pause:function(){for(let e in t)t[e].id==s&&-1===t[e].pauseTime&&(t[e].pauseTime=new Date,t[e].status="paused")},resume:function(){for(let e in t)t[e].id==s&&-1!==t[e].pauseTime&&(t[e].pauseKeepTime+=(new Date).valueOf()-t[e].pauseTime.valueOf(),t[e].pauseTime=-1,t[e].status="running")}}}(n,a||400,u||function(){}).stop}export{n as default};