【发布时间】:2012-02-07 22:28:18
【问题描述】:
我有一个菜单,当我将鼠标悬停在一个 div 上时,它会显示,鼠标移出时它会淡出。问题是,如果您滚动菜单的任何子项,菜单将消失(因为从技术上讲,如果您超过了其中一个子项,那么您就不会超过父项)有没有办法让子项不会滚动算作mouseout?这是我的代码:http://jsfiddle.net/32bLg/
【问题讨论】:
标签: jquery hover mouseevent
我有一个菜单,当我将鼠标悬停在一个 div 上时,它会显示,鼠标移出时它会淡出。问题是,如果您滚动菜单的任何子项,菜单将消失(因为从技术上讲,如果您超过了其中一个子项,那么您就不会超过父项)有没有办法让子项不会滚动算作mouseout?这是我的代码:http://jsfiddle.net/32bLg/
【问题讨论】:
标签: jquery hover mouseevent
这是一个非常简单的问题,大多数人倾向于使用计时器和特殊情况检查来过度复杂化。简单的解决方案是通过标记。将悬停目标和菜单放在同一个父项下,并在父项上跟踪悬停。 Like this。
您可能还想使用hoverIntent jQuery 插件来避免错误的悬停事件。
用户体验注意事项:持续超过 500 毫秒的淡入淡出动画很粗鲁。请不要那样做。
【讨论】:
hover 事件 + 长动画就可以了。切换到hoverIntent 和短动画,你就看不到了。
这是一个简单的解决方案: http://jsfiddle.net/32bLg/16/
【讨论】:
您需要在悬停 div 中包含菜单 div。见http://jsfiddle.net/T72jm/2/。
您会注意到(至少在 Chrome 中),如果您将鼠标悬停在悬停 div 上并且不执行任何操作,菜单 div 将会淡出。
【讨论】:
看看这些很好的例子:
一个特定的多级:
来自链接 2 的 HTML:
<ul id="nav">
<li><a href="#">1 HTML</a></li>
<li><a href="#">2 CSS</a></li>
<li><a href="#">3 Javascript</a>
<ul>
<li><a href="#">3.1 jQuery</a>
<ul>
<li><a href="#">3.1.1 Download</a></li>
<li><a href="#">3.1.2 Tutorial</a></li>
</ul>
</li>
<li><a href="#">3.2 Mootools</a></li>
<li><a href="#">3.3 Prototype</a></li>
</ul>
</li>
</ul>
CSS:
#nav, #nav ul{
margin:0;
padding:0;
list-style-type:none;
list-style-position:outside;
position:relative;
line-height:1.5em;
}
#nav ul ul{
top:auto;
}
#nav li ul ul {
left:12em;
margin:0px 0 0 10px;
}
#nav li:hover ul ul, #nav li:hover ul ul ul, #nav li:hover ul ul ul ul{
display:none;
}
#nav li:hover ul, #nav li li:hover ul, #nav li li li:hover ul, #nav li li li li:hover ul{
display:block;
}
JS:
function mainmenu(){
$(" #nav ul ").css({display: "none"}); // Opera Fix
$(" #nav li").hover(function(){
$(this).find('ul:first').css({visibility: "visible",display: "none"}).show(400);
},function(){
$(this).find('ul:first').css({visibility: "hidden"});
});
}
$(document).ready(function(){
mainmenu();
});
【讨论】:
这是我的解决方案
window.menushowing = false;
$('#menu').hover(
function() {
window.menushowing = true;
}, function() {
window.menushowing = false;
hideMenu();
});
function hideMenu() {
if (window.menushowing) return;
$('#menu').animate({
opacity: 0
}, 1500, function() {
$('#menu').hide();
});
}
$('#examplePic').hover(
function() {
window.menushowing = true;
$('#menu').css('display', 'block');
$('#menu').animate({
opacity: 1
}, 1500);
}, function() {
hideMenu();
});
【讨论】: