延迟显示下拉菜单内容
jQuery: Delay showing of a dropdown menu content
我已经建立了一个下拉菜单,工作良好。它是这样的:
- 主菜单项在水平栏中,然后
- 当鼠标悬停在任何项目上时,会显示一个带有子菜单链接的大下拉框。
- 这是我的代码:
<!-- 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写了一篇关于这个问题的文章,概述了亚马逊是如何解决的。这是一本很棒的读物!
- http://bjk5.com/post/44698559168/breaking-down-amazons-mega-dropdown
他还把一个jQuery插件放在一起,用一个工作演示来解决这个问题。你可以在GitHub上找到它:
- https://github.com/kamens/jQuery-menu-aim
http://htmlpreview.github.io/?https://github.com/kamens/jQuery-menu-aim/blob/master/example/example.html
$(function($) {
var m;
var timer="";
var wait=200;
active=function(){
$('.navbar .nav > li').mouseover(function() {
m = $(this);
if(timer==""){
test();
unb();
timer = setTimeout(reb,wait);
}
});
}
test = function(){
$(".horizontal-submenu").stop().hide(300);
m.find(".horizontal-submenu").stop().show(300);
};
unb = function(){
$('.navbar .nav > li').unbind('mouseover');
};
reb = function(){
timer="";
active();
};
$(".horizontal-submenu").hide(300);
active();
});
调整"等待"的最佳时机;你可以复制并尝试在你的脚本
这可能是您正在寻找的:-http://cherne.net/brian/resources/jquery.hoverIntent.html
从这个你需要2行在你的网页上激活悬停正常工作1)加载脚本hoverIntent2)在jQuery
请尝试setTimeout。
相关文章:
- JS下拉菜单显示在图像旋转器上
- 如何使我的下拉菜单显示/对齐
- 根据所选的下拉菜单显示HTML
- 如何根据每个下拉菜单显示图像
- 如何在我的js下拉菜单/显示内容框上的不同内容之间切换
- j查询下拉菜单显示不正确
- 使用数据的下拉菜单 - 显示子菜单
- 下拉菜单显示效果
- 如何使下拉菜单显示在幻灯片上
- 如何使下拉菜单显示在对话框顶部
- 使用html下拉菜单显示none和block
- 如何保持CSS/HTML下拉菜单显示部分离开页面
- 根据下拉菜单显示多个字段
- 根据下拉菜单显示月份和年份
- 我的下拉菜单显示不太好用
- 下拉菜单显示问题
- Jquery下拉菜单显示/隐藏多个
- 如何保持菜单下拉菜单显示,导航菜单项和下拉菜单项并关闭'close'按钮
- 需要我的下拉菜单显示多个
- 垂直下拉菜单显示子菜单,当单击另一个菜单项时关闭前一个菜单项