jQuery的.delay方法如何在引擎盖下工作?

我刚看到这个并认为它很酷。

console.log("Starting..."); $("#my_element") .fadeIn() .delay(3000) .fadeOut(); console.log("Finishing..."); 

.delay方法如何在引擎盖下工作? 我的意思是,它如何弄清楚如何等待3秒而不是中断主控制流程?

jQuery有一个内部的“队列”对象,它只是一个数组:

 [ nextAction, action, action, lastAction ] 

当你使用delay ,它会推动:

 function delay( ms ){ setTimeout( dequeue, ms ) } 

这意味着一旦它达到延迟,就会超时,然后触发下一个动作。 然而,立即发生的操作(如.css )会:

 function css(){ // do stuff dequeue(); } 

没有延迟。

它基本上使用你输入延迟function的时间超时。

请参阅此处的源代码: http : //james.padolsey.com/jquery/#v=1.6.2&fn=delay

queue和dequeue的代码也很有用:
http://james.padolsey.com/jquery/#v=1.6.2&fn=queue
http://james.padolsey.com/jquery/#v=1.6.2&fn=jQuery.dequeue