javascript - jQuery:延迟显示下拉菜单内容

标签 javascript jquery

我构建了一个工作正常的下拉菜单。它是这样的:

  1. 主菜单项在水平条中,然后
  2. 当悬停在任何项目上时,会显示大下拉框(带有子菜单链接)。
  3. 这是我的代码:

HTML:

<!-- Based on Bootstrap -->
<div class="navbar navbar-inverse">
    <div class="nav-collapse collapse">
        <ul class="nav">

            <li><a href="#about">First item</a>
                <div id="about-horizontal-submenu" class="horizontal-submenu">

                    <div class="submenu-container span3">
                        <ul>
                            <li><a href="#">Links</a></li>
                            <li><a href="#">Links</a></li>
                        </ul>
                    </div>
                    <!-- and 4x similar div (to have 12 cols) -->
                </div>
            </li>

            <li><a href="#about">Dropdown</a>
                <div id="about-horizontal-submenu" class="horizontal-submenu">
                    <!-- 3x similar div (like above) and then: -->
                    <div class="submenu-container span3">
                        <ul>
                            <li><a href="#">I want to go here</a></li>
                            <li><a href="#">Links</a></li>
                        </ul>
                    </div>
                </div>
            </li>

            <!-- And then goes another main menu item... -->              
            </ul>
        </div>
    </div>
</div>

JS:

jQuery(document).ready(function($) {
    'use strict';

    $('.navbar .nav > li').hover(function() {
        var $el = $(this);
        $el.addClass('hover');
        var $submenu = $el.find('.horizontal-submenu');
        if ($submenu.is(':hidden')) {
            $submenu.slideDown(200);
        }
    }, function() {
        var $el = $(this);
        $el.removeClass('hover');
        var $submenu = $el.find('.horizontal-submenu');
        if ($submenu.is(':visible')) {
            $submenu.hide();
        }
    });
});

问题

我想我需要在两者之前添加一点延迟 - 在第一次悬停时向下滑动子菜单和 - 更改子菜单内容(当切换/悬停到另一个菜单项时)。

为什么?

当你将鼠标悬停在“下拉”上并想选择“我想移动到这里”时:

您必须从“下拉菜单”项目向下,然后向右 - 这没问题(但不是很有用)。

问题是,当你像图片显示的那样(从“下拉菜单”直接到“我想移到这里” - 你在路上看到“第三项”并立即看到属于“第三项”的内容项”。这不是很好。

如果您能告诉我如何在很短的时间内延迟/忽略悬停在我的菜单项上,我将不胜感激。 (我在以下位置找到了很好的菜单行为示例:http://FEI.com)

最佳答案

可汗学院的 Ben Kamens 写了一篇关于这个确切问题的文章,概述了 Amazon.com 如何解决它。这是一本很棒的书!

他还整理了一个 jQuery 插件,通过一个工作演示来解决这个问题。您可以在 GitHub 上找到它:

关于javascript - jQuery:延迟显示下拉菜单内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16246211/

相关文章:

javascript - 在 setState() 之后更新的状态不会作为 props 传递给组件

javascript - 如何让 TypeScript Array.map() 返回与 VanillaJS 相同的值?

javascript - 为什么三元运算符中不能有 return ?

javascript - 使用 javascript/jquery 计算数组的总和

javascript - 异步 ajax 调用无需 async=false 并在每次调用之间设置延迟

javascript - HTML 按钮导致不必要的页面加载

javascript - 将 JavaScript 数组中的对象合并为对象

javascript - jQuery val 函数不适用于隐藏字段?

javascript - Chrome 在事件被阻止后显示目标链接

javascript - 如何检查 datetimepicker jquery 中的日期范围?