代码之家  ›  专栏  ›  技术社区  ›  Luca

delay()和fadeout()不会延迟队列中的attr()。

  •  10
  • Luca  · 技术社区  · 15 年前

    这个代码有什么问题?我想得到这个效果: fadeOut(500) attr('class','myClass') 延迟了600毫秒。然后 delay(600) 再一次 fadeIn(500) . 延误的发生是正确的,但是 attr() 没有被延误,当 #myDiv 还在褪色!:

    $('#myDiv').fadeOut(500)
               .delay(600)
               .attr('class','myClass')
               .delay(600)
               .fadeIn(500);  
    
    1 回复  |  直到 15 年前
        1
  •  25
  •   Nick Craver    15 年前

    这个 .delay() 只影响动画或 fx 队列(除非您特别指定了不同的队列)。请记住,链接和队列是两个截然不同的概念,链接继续使用同一个jquery集,但这完全不同于该集中元素上的任何事件队列。

    拥有 .attr() 受影响的调用,必须将其作为回调添加到同一队列,使用 .queue() ,像这样:

    $('#myDiv').fadeOut(500)
               .delay(600)
               .queue(function(next) { $(this).attr('class','myClass'); next(); })
               .delay(600)
               .fadeIn(500); 
    

    还要注意的是 .addClass() , .removeClass() .toggleClass() 可用的方法可能会使此更清晰。)