悬停菜单表现不正常

时间:2015-02-28 02:12:31

标签: javascript menu hover nav

我已经构建了一个简单的悬停菜单。工作示例here

当用户从左向右滚动一点点到快速,或点击填充而不是灰色部分时,菜单向下滑动然后再向上和向下滑动。

我希望它能让用户无缝衔接。因此,当它们始终悬停在菜单上时,它可以正常工作。

如果你玩弄鼠标,你可以在我的例子中看到我的意思。

有没有办法让这项工作完美无瑕并且符合预期?



$(document).ready(function($) {
    $("#mmenu").hide();
    $("#main-menu").hover(function() {
        $("#mmenu").slideToggle(500);
    });
});

#main-menu{
	background:#fff url(http://www.tzelan.com/wordpress/wp-content/uploads/2015/02/menu-black-bg.png) center center no-repeat;
	background-size: 9px 39px;
	border: 1px solid #b5b5b5;
	border-bottom:none;
	-webkit-border-radius: 5px 0 0 0;
	border-radius: 5px 0 0 0;
	position: absolute;
	left: 50px;
	text-align: center;
	top: 50px;
	vertical-align: middle;
	width: 25px;
	z-index:999;
	cursor:pointer;
	min-height: 100px;
}

#main-menu:after {
	background: url("http://www.tzelan.com/wordpress/wp-content/uploads/2015/01/menu-bottom-arrow.png") no-repeat scroll center bottom;
	bottom: -11px;
	content: "";
	display: block;
	height: 24px;
	left: -1px;
	position: absolute;
	width: 27px;
	z-index: 999;
}

#main-menu #mmenu{
	display: none;
	list-style: outside none none;
	position: relative;
	left: 0px;
	top:-5px;
	text-align: left;
	width: 275px;
	text-transform: uppercase;
	font-size: 10px;
	letter-spacing: 2px;
	font-family:"Apercu Light", Calibri, sans-serif; font-size-adjust:0.508; font-weight:200; font-style:normal;
}

#main-menu #mmenu li{
	height: 25px;
	line-height: 25px;
	padding:7px 0 0;
}

#main-menu #mmenu li a{
	background-color: #948f8f;
	color:#fff;
	text-decoration:none;
	text-align:left;
	padding:0 10px;
	display:block
}

#main-menu #mmenu li a:hover{
	background-color: #ccc;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="menu">
	<nav id="main-menu">

		<ul id="mmenu">
			<li><a href="#">Our Vision</a></li>
			<li><a href="#">Friends & Family</a></li>
			<li><a href="#">Studio Collection</a></li>
			<li><a href="#>Collected Curios</a></li>
			<li><a href="#">Live With Us</a></li>
			<li><a href="#">The Fifth Quarterly Publication</a></li>
		</ul>
	</nav>
</div>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:1)

问题是每个悬停事件都会触发slideToggle。您可能想要做的是每500ms限制一次这些事件。您需要准确地考虑您希望它如何工作。有人移动时会发生什么?你想让它们在打开之前将光标放在菜单上一点点吗?他们移除光标后会发生什么?过了多久? setTimeoutclearTimeout将是您的朋友。

PS,手机将如何使用它?

答案 1 :(得分:0)

我永远无法让setTimeout和clearTimeout工作,但我确实使用stop <99获得了99%

我用于可能正在寻找的人的代码是:

$(document).ready(function($) {
    $("#mmenu").hide();
    $("#main-menu").hover(function() {
        $("#mmenu").stop(true).slideToggle(500);
    });
});

唯一发生的事情是,如果用户在菜单上快速滚动,悬停没有完成,那么他们必须将鼠标放在菜单上,直到悬停结束。

如果有办法强制动画完全加载然后停止那么它将是完美的,但我认为这只是挑剔