jQuery's .delay方法在底层是如何工作的?

How does jQuery's .delay method work under-the-hood?

本文关键字:何工作 工作 delay 在底层 方法 jQuery      更新时间:2023-09-26

我刚看到这个,觉得很酷。

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

.delay方法在底层是如何工作的?我的意思是,它是如何在不中断主控制流程的情况下等待3秒钟的?

jQuery有一个内部"queue"对象,它只是一个数组:

[ nextAction,
  action,
  action,
  lastAction ]

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

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

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

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

没有推迟。

它基本上是使用超时的时间,你放入延迟函数。

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

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