Javascript 如何正确隐藏滑动菜单?
我有以下菜单:Javascript 如何正确隐藏滑动菜单?,javascript,jquery,menu,Javascript,Jquery,Menu,我有以下菜单: <div id="menuItem">Item1</div> <div id="subMenu"> <ul> <li>subitem1</li> <li>subitem2</li> <li>subitem3</li> </ul> </div> 不幸的是,当鼠标离开子菜单时,子菜单消失
<div id="menuItem">Item1</div>
<div id="subMenu">
<ul>
<li>subitem1</li>
<li>subitem2</li>
<li>subitem3</li>
</ul>
</div>
不幸的是,当鼠标离开子菜单时,子菜单消失。如何使子菜单仅在鼠标离开菜单项或子菜单列表时消失?我希望能够将鼠标悬停在子菜单上。请注意,两个菜单之间存在间隙
或者,如果您不想在menuitem中包含子菜单(这可能会弄乱您的CSS),您可以将所有内容包装在父div中,如: HTML:
或者,如果您不想在menuitem中包含子菜单(这可能会弄乱您的CSS),您可以将所有内容包装在父div中,如: HTML: 试试这个:
<div id="menuItem">Item1
<div id="subMenu">
<ul>
<li>subitem1</li>
<li>subitem2</li>
<li>subitem3</li>
</ul>
</div>
</div>
Item1
- 子项1
- 子项2
- 子项3
这可以在我的浏览器(firefox)中使用。尝试以下方法:
<div id="menuItem">Item1
<div id="subMenu">
<ul>
<li>subitem1</li>
<li>subitem2</li>
<li>subitem3</li>
</ul>
</div>
</div>
Item1
- 子项1
- 子项2
- 子项3
这在我的浏览器(firefox)中起作用。使子菜单实际上“在”您将事件附加到的菜单项中,这样,只有当用户实际离开菜单区域时,才会发生in/out事件 像这样:
$('#menuItem').mouseenter(function() {
$('#subMenu').slideDown(400);
}).mouseleave(function() {
$('#subMenu').hide(400);
});
css
#menuItem {
cursor: pointer;
width: 100px;
}
#menuItem .title {
background-color: orange;
}
#subMenu {
background-color: grey;
margin-top: 5px;
cursor: pointer;
display:none;
width: 80px;
}
$('#menuItem').mouseenter(function() {
$('#subMenu').slideDown(400);
}).mouseleave(function() {
$('#subMenu').hide(400);
});
html
<div id="menuItem">
<div class="title">Item1</div>
<div id="subMenu">
<ul>
<li>subitem1</li>
<li>subitem2</li>
<li>subitem3</li>
</ul>
</div>
</div>
友好提示:
<div id="subMenu">
<div id="menuItem">Item1</div>
<ul>
<li>subitem1</li>
<li>subitem2</li>
<li>subitem3</li>
</ul>
</div>
$('#subMenu').mouseenter(function() {
$('#subMenu ul').slideDown(400);
isInsideSubMenu = true;
}).mouseleave(function() {
$('#subMenu ul').hide(400);
});
在设置菜单动画之前,您可能需要使用某种形式的。停止(true,true)
,否则在菜单上快速来回移动光标将导致动画“堆叠”,用户只会感到陌生。请参阅此处的讨论:
所以看起来是这样的:
$('#menuItem').mouseenter(function() {
$('#subMenu').slideDown(400);
}).mouseleave(function() {
$('#subMenu').hide(400);
});
使子菜单实际上“在”您要将事件附加到的菜单项中,这样,只有当用户实际离开菜单区域时,输入/输出事件才会发生 像这样:
$('#menuItem').mouseenter(function() {
$('#subMenu').slideDown(400);
}).mouseleave(function() {
$('#subMenu').hide(400);
});
css
#menuItem {
cursor: pointer;
width: 100px;
}
#menuItem .title {
background-color: orange;
}
#subMenu {
background-color: grey;
margin-top: 5px;
cursor: pointer;
display:none;
width: 80px;
}
$('#menuItem').mouseenter(function() {
$('#subMenu').slideDown(400);
}).mouseleave(function() {
$('#subMenu').hide(400);
});
html
<div id="menuItem">
<div class="title">Item1</div>
<div id="subMenu">
<ul>
<li>subitem1</li>
<li>subitem2</li>
<li>subitem3</li>
</ul>
</div>
</div>
友好提示:
<div id="subMenu">
<div id="menuItem">Item1</div>
<ul>
<li>subitem1</li>
<li>subitem2</li>
<li>subitem3</li>
</ul>
</div>
$('#subMenu').mouseenter(function() {
$('#subMenu ul').slideDown(400);
isInsideSubMenu = true;
}).mouseleave(function() {
$('#subMenu ul').hide(400);
});
在设置菜单动画之前,您可能需要使用某种形式的。停止(true,true)
,否则在菜单上快速来回移动光标将导致动画“堆叠”,用户只会感到陌生。请参阅此处的讨论:
所以看起来是这样的:
$('#menuItem').mouseenter(function() {
$('#subMenu').slideDown(400);
}).mouseleave(function() {
$('#subMenu').hide(400);
});
将菜单和子菜单放在同一个容器中总是很好的,这样在导航子菜单时就不需要单独的鼠标处理程序 HTML:
<div id="subMenu">
<div id="menuItem">Item1</div>
<ul>
<li>subitem1</li>
<li>subitem2</li>
<li>subitem3</li>
</ul>
</div>
$('#subMenu').mouseenter(function() {
$('#subMenu ul').slideDown(400);
isInsideSubMenu = true;
}).mouseleave(function() {
$('#subMenu ul').hide(400);
});
CSS:
#subMenu ul { display:none;}
将菜单和子菜单放在同一个容器中总是很好的,这样在导航子菜单时就不需要单独的鼠标处理程序 HTML:
<div id="subMenu">
<div id="menuItem">Item1</div>
<ul>
<li>subitem1</li>
<li>subitem2</li>
<li>subitem3</li>
</ul>
</div>
$('#subMenu').mouseenter(function() {
$('#subMenu ul').slideDown(400);
isInsideSubMenu = true;
}).mouseleave(function() {
$('#subMenu ul').hide(400);
});
CSS:
#subMenu ul { display:none;}
假设您希望保持完全相同的html结构,可以使用以下代码:
$('#menuItem').mouseenter(function() {
$('#subMenu').slideDown(400);
}).next('#subMenu').mouseleave(function() {
$('#subMenu').hide(400);
});
请注意,我已经告诉jQuery仅当鼠标离开
#子菜单时才隐藏#子菜单
如果希望保持完全相同的html结构,则可以使用以下代码:
$('#menuItem').mouseenter(function() {
$('#subMenu').slideDown(400);
}).next('#subMenu').mouseleave(function() {
$('#subMenu').hide(400);
});
请注意,我已经告诉jQuery只有当鼠标离开#子菜单时才隐藏#子菜单
不是你问题的答案,而是jQuery手风琴。你考虑过jQuery手风琴吗?不是完整的答案,但我认为它会帮助你。你可能想查看hoverIntent jQuery插件。对于就像你描述的那样,当你隐藏菜单之类的东西时,它会让用户在将鼠标移出某个区域时有一定的灵活性,并使其更加友好。我的菜单必须像JSFIDLE示例中那样进行切片。我想知道一种我解释过的隐藏方法。我不明白你所说的切片是什么意思。html结构必须保持那样吗是吗?不是你问题的答案,但是Jquery手风琴你考虑过Jquery手风琴吗?不是一个完整的答案,但我认为它会帮助你。你可能想看看hoverIntent Jquery插件。对于像你描述的情况,当你隐藏一些东西,比如菜单,使其更加用户友好。我的菜单必须像JSFIDLE示例中那样进行切分。我想知道一种隐藏它的方法,正如我所解释的。我不明白切分的意思。html结构必须保持这种方式吗?