【问题标题】:Keep flyout menu open when hover over parent or menu将鼠标悬停在父级或菜单上时保持弹出菜单打开
【发布时间】:2015-12-30 19:47:14
【问题描述】:

我在这里遇到了很多问题,试图找出最好的方法,但无法让它们与我的代码一起工作。当主菜单项元素悬停时,我只希望弹出菜单在鼠标位于其上时保持不变。请注意,子菜单不是主菜单项的子菜单。他们坐在旁边。

这是我当前的脚本: 我需要天桥菜单一直显示,直到用户将鼠标移离菜单项本身(除非移动到天桥上)或离开天桥。

$('.menuItem').mouseover(function() {
    var item = $(this).attr('id');
    var id = item.substring(item.indexOf("_") + 1);
    var findFlyout = '#acFly_' + id;
    $(findFlyout).show();
})

$('.menuItem').mouseleave(function() {
    var item = $(this).attr('id');
    var id = item.substring(item.indexOf("_") + 1);
    var findFlyout = '#acFly_' + id;
    $(findFlyout).hide();
})

您可以在此处查看实时页面:http://205.134.239.12/~artscr6/artscrush/

【问题讨论】:

    标签: javascript jquery menu navigation


    【解决方案1】:

    菜单的 html 不正确,因为 ul 标签只能包含 li 标签 (https://developer.mozilla.org/en/docs/Web/HTML/Element/ul)。您应该在 li 项目中添加飞出 div。解决此问题后,悬停效果也将起作用。

    【讨论】:

    • 好电话。我已经将 HTML 更新为不再使用真正的 ul/li 元素(只是带有类的 div)。我不能将天桥元素放在父元素中,因为我需要天桥框“突破”父元素,以便它可以在页面上展开,并且父元素必须相对定位,因为另一个子元素依靠其边界进行绝对定位。那是一张满嘴打字的嘴……
    【解决方案2】:

    您需要mouseover 而不是hover


    Hover 既可以处理您想要的 mouseover,也可以处理您不需要的mouseout。只要您将鼠标从链接上移开,您的天桥就会隐藏起来。

    Mouseover 将在您的鼠标点击链接时显示天桥并且不会进行任何隐藏。

    注意:您仍然需要一些代码来隐藏天桥。先试试这个,看看效果如何。


    悬停: https://api.jquery.com/hover/

    鼠标悬停: https://api.jquery.com/mouseover/

    添加一些代码:

    包括Outside Events plugin

    $('.menuItem').mouseover(function() {
        var item = $(this).attr('id');
        var id = item.substring(item.indexOf("_") + 1);
        var $findFlyout = $('#acFly_' + id);
        // remove previous bound clickoutside
        $('.flyMenu').unbind('clickoutside');
        // close flyout when clicked outside
        $findFlyout.on('clickoutside', function() {
          $findFlyout.unbind('clickoutside').hide();
        }).show();
    });
    

    【讨论】:

    • 谢谢,有道理。我已经用我现在拥有的内容更新了我的问题中的代码。它正在显示/隐藏浮出控件,但是当用户将鼠标悬停在菜单项或浮出控件上时,我还需要使浮出控件保持显示状态。如何检测悬停的内容以确定何时隐藏/显示?感谢您的帮助。
    • 请修复示例页面。我去看看。
    • 谢谢,它现在应该恢复原状了,我之前正在处理它。
    • 您所做的是复制原始悬停行为。您需要删除 mouseleave(顺便说一句:更常用的是 mouseout)。现在天桥没有关闭。为此,我通常使用 Ben Alman 的 Outside Events。每当您在菜单外单击时,它都会触发一个事件。 $(findFlyout).on('clickoutside', function() { $(findFlyout).unbind('clickoutside').hide(); });
    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 2011-06-22
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多