1

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

2 回答 2

2

你的小提琴

改变这个:

.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;
}
于 2013-02-02T17:22:04.023 回答
1

这个家伙有一个小提琴的宝石,我相信它也可以解决你的问题:

http://jsfiddle.net/nick_craver/GgdEM/1/

这个问题是一个跳动的菜单,我认为这可能是您的边界问题的原因(事件触发非常糟糕)。

关键是有一个超时,当再次悬停时会自动清除。

悬停时使用上滑和下滑的 JQuery 下拉菜单很跳跃

他通过每个菜单项的数据属性来做到这一点,因此每个项目都是独立处理的。

看一看:

$(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。

于 2013-02-02T17:30:28.730 回答