jQuery меню, переключение слайд с парением? - PullRequest
2 голосов
/ 22 ноября 2011

У меня есть меню, в котором только один элемент имеет подсписок. Вот HTML-код:

<div id="menu">
<ul>
    <li><a href="index.html">Home</a></li>
    <li><a href="#">Products</a></li>
    <li><a href="#">About</a>
        <ul>
            <li><a href="#">Example One</a></li>
            <li><a href="#">Example Two</a></li>
            <li><a href="#">Example Three</a></li>
        </ul>
    </li>
</ul>
</div>

Я бы хотел slideDown меню и оставаться включенным, когда мышь находится в меню или подменю. Таким образом, следующее работает хорошо, но я хочу то же самое с hover, а не click.

 $('#menu ul li').click(function() {
  $('#menu ul li ul').slideToggle('slow', function() {

  });
});

Я пытался с hover, но он очень глючит, вот код тоже:

$("#menu ul li").hover(
  function () {
    $("#menu ul li ul").slideDown('slow');
  },
  function () {
    $("#menu ul li ul").slideUp('slow');
  }
);

Я пытался добавить .stop(true, true) или $("#menu ul li ul").css("display", "block"); после slideDown, но он все еще глючит.

CSS

#menu ul {
    list-style: none;
}
#menu ul li {
    display: block;
    float: left;
    padding: 0;
    margin: 0 30px;
}
#menu ul li a {
    color: #8b4513;
    text-decoration: none;
    font-size: 16px;
}
#menu ul li a:hover {
    text-decoration: underline;
}
#menu ul li a img {
    position: relative;
    top: 2px;
    left: -4px;
}
#menu ul li ul {
    position: absolute;
    width: 151px;
    height: 90px;
    top: 59px;
    left: 300px;
    padding: 10px 0 0 0;
    background: url(gfx/submenu.png) no-repeat;
    z-index: 1;
}
#menu ul li ul li {
    height: 27px;
    float: none;
    margin: 0 25px;
}

Ответы [ 3 ]

2 голосов
/ 22 ноября 2011

Проверка это в прямом эфире

HTML

<div id="menu">
<ul>
    <li><a href="#">Home</a></li>
    <li><a href="#">Products</a></li>
    <li><a href="#">About</a>
        <ul>
            <li><a href="#">Example One</a></li>
            <li><a href="#">Example Two</a></li>
            <li><a href="#">Example Three</a></li>
        </ul>
    </li>
</ul>
</div>

Jquery

$("#menu ul li").hover(
  function () {
    $(this).children("ul").stop(true,true).slideDown('slow');
  },
  function () {
    $(this).children("ul").stop(true,true).slideUp('slow');
  }
);
0 голосов
/ 22 ноября 2011

Fiddle Demo: http://jsfiddle.net/ZMLyz/

$('#menu ul li').mouseenter(function() {
    $(this).find('ul').slideDown('slow');
});

$('#menu ul li').mouseleave(function() {
    $(this).find('ul').slideUp('slow');
});
0 голосов
/ 22 ноября 2011

Hover срабатывает каждый раз, когда мышь перемещается по элементу. Вместо этого используйте ввод / выход:

$("#menu ul li").mouseenter(
  function () {
    $("#menu ul li ul").slideDown('slow');
  }
);
$("#menu ul li").mouseleave(
  function () {
    $("#menu ul li ul").slideUp('slow');
  }
);
...