在做缓动效果时,发现有时候是需要排队的,不然多个setTimeout这样的事件执行起来时同步的。
排队原理很简单:
把事件执行的函数push到一个数组里,挨个执行就是了
写的比较简单,没有增加什么事件的onStart,onFinish的调用,所以在push进去的时间中自行增加cb&cb()进行回调;
Code
1function EventThread(){
2 var t=this,evts=[],tm=null,i=0;
3 t.run=function(){
4 if(evts.length==0){
5 clearTimeout(tm);
6 return;
7 }
8 var evt=evts.shift();
9 function g(){
10 var cb=function(){t.run.apply(t)}
11 evt.fun.apply(evt.app,[cb]);
12 }
13 tm=window.setTimeout(function(){try{g()}catch(e){t.run.apply(t)}},evt.time||0);
14 }
15 //time [number] 等待时间
16 t.stop=function(time){
17 clearTimeout(tm);
18 if(time>0) setTimeout(t.run,time);
19 }
20 t.clear=function(){
21 clearTimeout(tm);
22 evts=[];
23 }
24 t.add=function(fun,apEl,timeout){
25 if(!fun) return;
26 evts.push({fun:fun,app:apEl||document,time:timeout||0})}
27}
Tag标签: Javascript,单线程,排队,时间,Thread