var $back = $("<li class='back'><div class='left'></div></li>").appendTo(e);function move(el){
  $back.each(function(){
$(this).dequeue(); //这句代码做了什么事情?
     }).animate({
width: el.offsetWidth,
left: el.offsetLeft
     }, o.speed , o.fx );
   }
}这个是菜单背景($back)随着鼠标移动到菜单而移动到当前鼠标hover菜单的动画
如果不加上这句:.each(function(){
$(this).dequeue();
     })
那么如果鼠标在菜单上从左滑动到右,动画会从左边第一个菜单移到第二个,然后一次执行动画直到移动到当前hover的菜单;
如果加上这句,重复上述操作,菜单会只执行一个动画,从最左菜单直接移动到最右边。
请教高手,这句代码究竟做了什么事情?

解决方案 »

  1.   

    你该不会连API都不知道吧?http://www.css88.com/jqapi-1.6/index.html#p=dequeue
      

  2.   

    当.dequeue()被调用的时候,列队中的下一个函数将从这个列队中被移除,然后再执行。这个函数必须依次(立即或者间接地)造成.dequeue()被调用,所以,这个序列可以继续。
      

  3.   

    我知道.dequeue() ,但是我不明白加上这句话后为什么是这个效果
      

  4.   

    从队列最前端移除一个队列函数,并执行他。   API不明显还是你没有去看哦?
      

  5.   

    那如果一个动画还没结束,.dequeue就移除一个队列函数并执行,会发生什么?等那个动画完成吗?
      

  6.   

    怎么解释呢!!这样说吧,你准备了a动画,b动画,c动画等一组动画,我们理解为一个队列,然后在调用dequeue函数的时候取出这个队列里面的第一个动画来执行它,也就是执行a动画。你的明白?