2010-09-03 61 views
2

我是一个完全绝对的jQuery noob。我一直在关注一个教程,向我的网站添加一个CSS/jQuery导航菜单,并且我能够正常工作。我希望看到的唯一一件事是鼠标移出一小段时间,因为下拉菜单正在立即消失当你将鼠标移出时会让菜单有点烦人。以下是我的脚本:为这条jQuery添加MouseOut延迟(菜单导航)

function mainmenu(){ 
$(" .top-menu ul ").css({display: "none"}); // Opera Fix 
$(" .top-menu li").hover(function(){ 
    $(this).find('ul:first').css({visibility: "visible",display: "none"}).show(400); 
    },function(){ 
    $(this).find('ul:first').css({visibility: "hidden"}); 
    }); 
} 

$(document).ready(function(){ 
mainmenu(); 
}); 

是否有人愿意将所需的代码添加到此脚本中。我会答应来研究你是怎么做到的,所以其实我从中学到;-D

回答

5

你可以做这样的事情,给它一个500ms的延迟:

function mainmenu(){ 
    $(".top-menu ul ").hide(); 
    $(".top-menu li").hover(function() { 
    clearTimeout($.data(this, 'timeout')); 
    $(this).find('ul:first').show(400); 
    }, function() { 
    $.data(this, 'timeout', setTimeout($.proxy(function() { 
     $(this).find('ul:first').hide(); 
    }, this), 500)); 
    }); 
} 
$(mainmenu); 

这增加了500毫秒延迟通过setTimeout()和只存储定时器ID与元素使用$.data(),当悬停在元素,它会清除超时,并将不会再运行,直到你超出了......所以你必须离开元素为500毫秒为它隐藏。

或者,做一些与hoverIntent plugin非常相似的东西,这就是这个问题。

1
$(" .top-menu li").hover(function(){ 
    $(this).find('ul:first').css({visibility: "visible",display: "none"}).show(400); 
},function(){ 

    // Note here... 
    setTimeout(function(){ 
     $(this).find('ul:first').css({visibility: "hidden"}); 
    }, 2000); 
    // 2000 is a delay time in milliseconds, change it 

}); 
+0

您必须存储超时ID ...如果我将* back *放入元素中,该怎么办?它会隐藏在2秒内,无论我是否正在使用它:)另外'this'不会是你想要它在函数中,你必须设置闭包的上下文或传递一个引用到元件。 – 2010-09-03 12:00:06

+0

感谢您的快速回复家伙..代码确实做了些什么,但现在菜单保持打开状态,即使我离开导航部分。有任何想法吗 ? :) – 2010-09-03 13:27:42