Это простое меню скрыть/показать: Когда вы наводите указатель на элемент списка, скрипт показывает любые неупорядоченные списки, которые являются дочерними элементами этого элемента списка, а затем отображает. CSS помещает этот под-список в непосредственное правое положение элемента списка. Когда вы наведите курсор мыши, он снова скрывает этот неупорядоченный список.jQuery hover() hide/show cause bounce
HTML-:
<div class="menu-header-category-menu-container">
<ul id="menu-header-category-menu" class="menu">
<li id="menu-item-58"><a href="?cat=3">Parent Category I</a>
<ul class="sub-menu">
<li id="menu-item-59"><a href="?cat=6">Child Category I</a></li>
<li id="menu-item-60">
<a href="?cat=7">Child Category II</a>
<ul class="sub-menu">
<li id="menu-item-61"><a href="?cat=9">Grandchild Category I</a></li>
</ul>
</li>
</ul>
</li>
<li id="menu-item-62"><a href="?cat=4">Parent Category II</a></li>
<li id="menu-item-63">
<a href="?cat=5">Parent Category III</a>
<ul class="sub-menu">
<li id="menu-item-64"><a href="?cat=8">Child Category III</a></li>
</ul>
</li>
<li id="menu-item-57"><a href="?cat=1">Uncategorized</a></li>
</ul>
</div>
CSS-:
li {
width: 150px;
border: 1px solid black;
background-color: aqua;
list-style-type: none;
position: relative;
}
ul.sub-menu {
position: absolute;
left: 110px;
top: 0px;
display: none;
}
JavaScript:
$(document).ready(function() {
$('li').hover(
function() { $(this).children('ul').show('slow'); },
function() { $(this).children('ul').hide('slow'); }
);
});
Он работает в основном как это должно быть. За исключением случаев, когда вы перемещаете мышь из элемента списка и оставляете ее в пространстве, где должен появляться суб-список (перед тем, как подсвечник заканчивается), вы застряли в цикле show/hide/show/hide, пока вы не переместите указатель мыши.
Я попытался исправить это, используя setTimeout() как в функции аргумента mouseover, так и в функции аргумента mouseout. Я также пытался использовать условия, чтобы проверить, скрыт ли подсписчик в этих аргументах. Я не вижу разницы в производительности.
Любой
Попробуйте привязки обработчика к курсора, находящегося якоря вместо элемента списка. У меня такое чувство, что он прояснится. – lsuarez
Я вижу логику в этом (так как li содержит подменю), но это не приведет к исчезновению подменю при выводе мыши из якоря (что вы сделали бы, если бы вам нужно было щелкнуть что-то в подменю) –
Derp. Посмотрел, прежде чем я прыгнул, так что это не решение, но у меня такое чувство, что это источник проблемы. Кажется, что указатель мыши на элементе списка должен скрывать любые видимые подменю на текущем уровне, а затем показывать свои собственные, с помощью мыши на верхнем уровне ul, чтобы скрыть любые видимые подменю. – lsuarez