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

时间:2011-07-07 21:14:01

标签: javascript jquery

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

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

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

2 个答案:

答案 0 :(得分:6)

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

[ nextAction,
  action,
  action,
  lastAction ]

当您使用delay时,它会推送:

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

意味着一旦达到延迟,就会超时,然后触发下一个动作。立即发生的操作,例如.css,请执行:

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

没有延迟。

答案 1 :(得分:0)

基本上使用超时和你投入延迟功能的时间。

请在此处查看源代码:http://james.padolsey.com/jquery/#v=1.6.2&fn=delay

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