在做缓动效果时,发现有时候是需要排队的,不然多个setTimeout这样的事件执行起来时同步的。
排队原理很简单:
把事件执行的函数push到一个数组里,挨个执行就是了
写的比较简单,没有增加什么事件的onStart,onFinish的调用,所以在push进去的时间中自行增加cb&cb()进行回调;

Code
1
function 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