延迟后淡出jQuery菜单

时间:2009-09-22 00:54:16

标签: jquery menu hover delay settimeout

我正在开发一个jQuery下拉菜单,当您将鼠标悬停在顶级项目上时,该菜单会消失。我想设置它,以便当您移动鼠标时,菜单不会立即消失。我有这段代码:

$(document).ready(function(){
  $('ul#menu > li').hover(
    // mouseover
    function(){
      $(this).find('>ul').fadeIn('fast');
    },
    // mouseout
    function(){
      setTimeout( function(){
        alert('fadeout');
        $(this).find('>ul').fadeOut('fast')
        }, 1000 );
    }  
  );
});

一秒钟后警报发生,但菜单没有淡出。

2 个答案:

答案 0 :(得分:3)

window.setTimeout(),所以这是指窗口对象。

// mouseout
function(){
  var el=this;
  setTimeout( function(){
    alert('fadeout');
    $(el).find('>ul').fadeOut('fast')
    }, 1000 );
}  

答案 1 :(得分:3)

看看hoverIntent。通过配置,它可以让您更好地控制mouseover / mouseout事件的行为:

var config = {    
     sensitivity: 3, // number = sensitivity threshold (must be 1 or higher)    
     interval: 200, // number = milliseconds for onMouseOver polling interval    
     timeout: 500, // number = milliseconds delay before onMouseOut    
};

$(document).ready(function(){
  $('ul#menu > li').hoverIntent(
    // mouseover
    function(){
      $(this).find('>ul').fadeIn('fast');
    },
    // mouseout
    function(){
       $(this).find('>ul').fadeOut('fast');
    }  
  );
});