jquery下拉列表上的无限高度(slideUp和slideDown)

时间:2013-02-02 16:22:37

标签: jquery drop-down-menu height slidedown infinite

基本上我使用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>

2 个答案:

答案 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。