【问题标题】:Infinite height on jquery dropdown (slideUp and slideDown)jquery 下拉列表的无限高度(slideUp 和 slideDown)
【发布时间】:2013-01-17 19:16:56
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    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;
    }
    

    【讨论】:

    • 成功了。但是这样我就没有延长线。没办法绕过去?
    • 填充是您的问题,解决方法是为您的菜单添加固定高度(但这有其自身的问题),或者可能将您的子菜单“包装”在另一个具有没有高度,但有边框和填充(没有测试过......)
    • 另一种可能是最好的解决方案是在 LAST 或 FIRST 菜单项中添加填充...类似 jsfiddle.net/THWhZ
    • 是的,我去吃午饭时也想过同样的事情:D 谢谢德乔
    【解决方案2】:

    我相信,这家伙的绝招也能解决你的问题:

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

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

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

    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。

    【讨论】:

    • 类似。虽然在我的情况下,显然我只需要删除填充。他的案例也很有用 - 即使他带着鼠标离开并返回一段时间,下拉菜单也会恢复:)
    猜你喜欢
    • 2013-09-10
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多