基本上我使用slideUp和slideDown函数创建了一个带有jquery的下拉菜单。一切顺利,直到我认为如果我继续将鼠标悬停在列表中,子按钮的高度将不会停止。我们可以看到边界左扩展。有什么方法可以避免这种情况吗?
我创造了一个小提琴,以便你们可以知道我在说什么http://jsfiddle.net/WGm8q/
无论如何这里是代码:
JS
$('.button').hover(
function () {
$('.sub', this).stop().slideDown(100);
},
function () {
$('.sub', this).stop().slideUp(100);
}
);
CSS
.menu {
width: 850px;
}
.button .main {
padding-bottom: 5px;
cursor: pointer;
}
.button .sub {
display: none;
margin-left: 10px;
padding: 10px 0 10px 0;
border-left: 1px solid #CCC;
}
.button .sub p {
background-color: #FFF;
margin: 0;
padding-left: 5px;
}
HTML
<div class="menu">
<div class="button">
<div class="main">Menu 1</div>
<div class="sub">
<p>Submenu 1</p>
<p>Submenu 1</p>
<p>Submenu 1</p>
<p>Submenu 1</p>
<p>Submenu 1</p>
<p>Submenu 1</p>
<p>Submenu 1</p>
</div>
</div>
</div>
答案 0 :(得分:2)
Your Fiddle
改变这个:
.button .sub {
display: none;
margin-left: 10px;
padding: 10px 0 10px 0;
border-left: 1px solid #CCC;
}
分为:
.button .sub {
display: none;
margin-left: 10px;
border-left: 1px solid #CCC;
}
答案 1 :(得分:1)
这家伙有一个小提琴的宝石,我也相信会解决你的问题:
http://jsfiddle.net/nick_craver/GgdEM/1/
这个问题是一个跳跃的菜单,我认为这可能是你的边界问题的原因(事件发生所有screwey)。
关键是要有一个超时,当再次悬停时它会自行清除。
JQuery dropdown menu using slideup and slidedown on hover is jumpy
他通过每个菜单项的数据属性执行此操作,因此每个项目都是独立处理的。
看看:
$(function () {
$('#nav li').hover(function () {
clearTimeout($.data(this, 'timer'));
$('ul', this).stop(true, true).slideDown(200);
}, function () {
$.data(this, 'timer', setTimeout($.proxy(function() {
$('ul', this).stop(true, true).slideUp(200);
}, this), 200));
});
});
他的小提琴似乎没有任何边界问题,所以也许看看他的标记和CSS。