2011-12-21 148 views
1

我想添加延遲到一個簡單的下拉菜單。用下面的代碼,我得到了一個延遲,但錯誤的種類。當我將鼠標移動到菜單上的速度非常快時,它會延遲它,但仍會在300毫秒後打開它。正確的行爲是在鼠標懸停300ms時打開菜單,離開時也一樣。添加延遲到jquery下拉菜單

$('#menu-item-1226:not(.parent-pageid-1225 #menu-item-1226)').hover(function(){ 
    var menu = this; 
    setTimeout(function(){ 
     $(menu).find('ul').slideToggle(100); 
    }, 300); 
}); 

難道我需要stop它不知何故或什麼是正確的方法嗎?
在此先感謝

回答

4

這可能是你更好的尋找,但使用jQuery插件HoverIntent也能發揮作用,也許。

沒有懸停意圖:

$(function() { 
     var timer; 
    $('#Header li').hover(function(){ 
       if(timer) { 
         clearTimeout(timer); 
         timer = null 
       } 
       timer = setTimeout(function() { 
          $(this).find('ul').slideToggle(100); 
       }, 500) 
    }, 
    // mouse out 
    }); 

});

hover intent plugin

$("#Header li").hoverIntent({ 
    sensitivity: 7, // number = sensitivity threshold (must be 1 or higher) 
    interval: 50, // number = milliseconds of polling interval 
    over: function() { 
     $('ul', this).slideDown(220); 
    }, // function = onMouseOver callback (required) 
    timeout: 0, // number = milliseconds delay before onMouseOut function call 
    out: function() { 
     $('ul', this).hide(); 
    } // function = onMouseOut callback (required) 
}); 
+0

謝謝!但不知何故,我無法得到這個工作...這是一個工作的代碼或我需要調整它嗎? – 2011-12-21 12:05:52

+0

對不起,我還沒有測試過它。然而,這是做到這一點的方法。我根據自己的需要調整了一下,這可能是我出錯的地方。 – 2011-12-21 12:10:19

+0

我正在處理它,我會盡快發佈正確的語法。 – 2011-12-21 12:18:16

-1

只使用delay()

$(menu).find('ul').delay(300).slideToggle(100); 

你說在毫秒的延遲,這只是你的後效應。

+1

這將對如上所述,當你移動了鼠標速度非常快仍然打開的菜單一樣的效果。 – 2011-12-21 11:08:37

+0

您發佈了錯誤的解決方案。 我的帖子在他之前;) – 2011-12-21 11:19:22

-2
$(menu).find('ul').delay(300).slideToggle(100); 
+0

這仍然會導致菜單顯示,只是延遲300毫秒。 – lxalln 2011-12-21 13:59:24