Вы можете сделать что-то вроде этого с задержкой в 500 мс:
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()
и просто сохраняет идентификатор таймера вместе с элементом, используя $.data()
, при наведении курсора на элемент, он очищается тайм-аут и не будет запускаться снова, пока вы не закончите ... поэтому вы должны быть отключены от элемента на 500 мсек, чтобы он скрылся.
Или сделайте что-то очень похожее с плагином hoverIntent
, предназначенным именно для этой проблемы.