2010-03-07 48 views
2

我創建了一個菜單,我通過懸停事件顯示和隱藏子菜單,如下面的代碼如何在一些毫秒後提高懸停事件?

是任何方式,子菜單顯示或隱藏後,他們的一些毫秒鼠標留在?

$(" #nav li").hover(function(){ 
     $(this).find('ul:first').show(600); 

     },function(){ 
     $(this).find('ul:first').fadeOut(400); 
     }); 
} 

回答

0

設置一個計時器hover()。清除handlerOut中的計時器。

var timeoutId = { }; 

function show(id) { 
    $("#"+id).find('ul:first').show(600); 
    timeoutId[id]= null; 
} 

function init() { 
     $("#nav > li").hover(
      function(){ 
       var id = $(this).attr('id'); 
       timeoutId[id]= setTimeout(function(){show(id);}, 800); 
      }, 
      function(){ 
       var id = $(this).attr('id'); 
       if (typeof timeoutId[id] != "undefined" && timeoutId[id]!=null) { 
        clearTimeout(timeoutId[id]); 
        timeoutId[id]= null; 
       } 
       $(this).find('ul:first').fadeOut(400); 
      } 
    ); 
    } 

    $(document).ready(init); 
0

這裏有一個更簡潔的版本比Cheeso's

$(function() { 
    $("#Trigger").hover(
     function() { 
      $("#Target").delay(800).fadeIn(0); 
     }, 
     function() { 
      $("#Target").clearQueue().fadeOut(400); 
     } 
    ); 
}); 

delay會導致#Target不褪色爲800毫秒。當您懸停時(無論#Target已完全顯示還是等待由於delay而顯示),則調用clearQueue。如果在800毫秒內發生,則從隊列中清除delayfadeIn。否則,隊列將已經爲空。無論哪種情況,#Target都會立即淡出。

(請注意,你需要使用fadeIn(0)而不是show因爲show不是一件那張FX隊列,因此delay不會有任何效果。)

如果你也想拖延fadeOutdelay需要去後clearQueue,而不是之前。

更新

我注意到,如果,而不是fadeIn(0),您使用fadeIn(500),但那些在500ms內徘徊了,然後在隨後的懸停接管,#Target只會淡入不透明度,這是以前允許淡入。有人知道這是否是有意的行爲?