【问题标题】:Basic Jquery drop down menu from scratch从头开始的基本 Jquery 下拉菜单
【发布时间】:2011-07-26 23:15:20
【问题描述】:

我正在尝试使用 jquery 构建一个基本的下拉菜单。我在顶部导航中有一个按钮,当用户悬停时,一个 div 会滑到它下面。这是我到目前为止的代码:

<script>

$('.rentals-link').mouseenter(function() {
  $('.region-drop-down-menu').slideDown();
});

$('.region-drop-down-menu').hover(function() {
  $('.region-drop-down-menu').slideDown();
});

$('.region-drop-down-menu').mouseleave(function() {
  $('.region-drop-down-menu').slideUp();
});


</script>

代码的问题在于,我不知道如何在鼠标离开按钮区域时让 div 向上滑动,以及在离开 div 区域时如何让它向上滑动。有什么建议吗?

【问题讨论】:

    标签: jquery


    【解决方案1】:

    也许会

    <div class="dropdown-menu-toggle">Toggle</div>
    <div class="dropdown-menu-content">...</div>
    

    var isInDropDown = false, isInToggle = false;
    $('.dropdown-menu-toggle').mouseenter(function() {
        $('.dropdown-menu-content').slideDown();
        isInToggle = true;
    }).mouseleave(function() {
        setTimeout(function() {
            if(! isInDropDown) {
                $('.dropdown-menu-content').slideUp();
            }
        }, 1000);
        isInToggle = false;
    });
    $('.dropdown-menu-content').mouseenter(function() {
        $('.dropdown-menu-content').slideDown();
        isInDropDown = true;
    }).mouseleave(function() {
        setTimeout(function() {
            if(! isInToggle) {
                $('.dropdown-menu-content').slideUp();
            }
        }, 1000);
        isInDropDown = false;
    });
    

    因此,两个元素在关闭之前都会检查鼠标指针是否在另一个元素之内。这也给了用户一些时间来移动光标(1 秒)。我的 jsfiddle 叉子:http://jsfiddle.net/zkRq2/

    【讨论】:

    • 我无法将切换触发器和下拉菜单内容包装在同一个 div 中。我希望我可以,但这不是我正在使用的选项。
    • 这可行,但我注意到一个问题。当用户进入 .dropdown-menu-toggle 区域,然后在离开两个区域后进入 .dropdown-menu-content 时,菜单开始向下滑动并连续向后滑动。你知道如何解决这个问题吗?这就是我的意思:jsfiddle.net/zkRq2/1。从链接区域转到链接区域外,然后进入下拉区域。当您按该顺序进行时,下拉区域会一遍又一遍地向下滑动。
    【解决方案2】:

    通常您希望将下拉菜单放在主 div 中,这样它就是主 div 的一部分。然后,当您在主 div 上有 mouseleave 时,包括下拉菜单。

    【讨论】:

    • jsfiddle.net/vjWPP/1 这就是我的意思,我添加了一个我称为“主 div”的 div。
    • 我在包装器 div 中有不止一个链接,我只想要一个链接来触发 slideDown - 不是所有的链接。我怎样才能做到这一点并且仍然让它的行为方式相同?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    相关资源
    最近更新 更多