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