如何使用jquery延迟隐藏事件



我在悬停触发的下拉菜单上有一个显示/隐藏功能,我现在正试图调整它。我希望下拉列表在悬停时出现,但当鼠标离开时,等待大约500毫秒后再返回,除非鼠标离开并悬停在另一个li项目上(我甚至还没有解决第二个条件,因为我没有成功满足第一个条件)。

这是我迄今为止所拥有的一部分。。。http://jsfiddle.net/u4e1tv21/12/

我做了一些挖掘,并尝试更改js

$('[data-toggle="menu"]').on('mouseleave', function (ev) {
    var id = $(this).data('target');
    $('.sub-menu').hide();
    $(id).hide();
});

到这个

$('[data-toggle="menu"]').on('mouseleave', function (ev) {
    var id = $(this).data('target');
    setTimeout(function () {
        $('.sub-menu').hide();
        $(id).hide();
    }; 2000);
});

从这一变化完全打破了这一事件的事实来看,我知道我做得不太对。然而,我似乎不知道什么是正确的方法。任何帮助都将不胜感激。

使用delay(duration)

$('.sub-menu').delay(500).hide(0);
$(id).delay(500).hide(0);

更多信息:http://api.jquery.com/delay/

我相信您可能需要在这里使用slideUp()slideDown()效果

$(document).ready(function () {
    $('.sub-menu').hide();
    $('[data-toggle="menu"]').on('mouseenter', function (ev) {
        var id = $(this).data('target');
        $('.sub-menu').slideUp();
        $(id).slideDown();
    });
    $('[data-toggle="menu"]').on('mouseleave', function (ev) {
        var id = $(this).data('target');
        $('.sub-menu').slideUp();
        $(id).slideUp();
    });
});

有了这个效果,你将有一个漂亮整洁的子菜单的进出动画,而不需要使用两个效果函数,如delay().hide(),这也会起作用,但在我看来,slideUp和slideDown()会使它更短。

这里有一把最新的小提琴http://jsfiddle.net/u4e1tv21/20/

最新更新