2010-04-07 2 views
1

У меня есть один большой div с одним меньшим div внутри него. Маленький div сначала отображается как скрытый. Когда пользователь наводит мышь на большой контейнер-div, меньший div оживляется с помощью show/hide-functions. Пока все работает нормально.jQuery slide up/down on hover bug

Однако. Маленький div анимируется снизу - поэтому, если я позволяю курсору нависнуть над контейнером в самом низу, он нависает над анимацией меньшего div, пока он скользит. Итак, теперь курсор парит над меньшим div вместо более крупного div и, таким образом, запускает функцию hide на меньшем div. Это создает бесконечный цикл вызовов show/hide, поскольку меньший div перемещается в или из указателя курсора.

Любые идеи, как избежать этого и не нарушать зависание на контейнере по мере того, как вводится меньший div?

Это то, что я имею в виду:

alt text http://archivedworks.com/fileserver/jQuery_hover_showhide.jpg

+0

Вы используете события .hover() 'или' .mouseXX' для привязки обработчика событий? –

+0

Я использовал метод в ответе, помеченном как решение. Событие Ergo .hover(). – o01

ответ

6

Вы можете сделать это следующим образом:

$("#outerDiv").hover(function() { 
    $("#innerDiv:hidden").slideDown(); //your show code 
}, function() { 
    $("#innerDiv:visible").slideUp(); //your show code 
}); 

Это только в очередь скрыть анимацию, если она видна (:visible), и только очереди анимации шоу, если это не (:hidden), предотвращая теперь поведение очереди/петли.

+0

Спасибо! Это работало как шарм :) – o01

+0

Эй, Ник, это работает для меня, но я не хочу, чтобы '# innerDiv' скрывался, когда вы просматриваете его. Он там все равно сохраняет его, пока курсор не покинет '# containerDiv'? –

+1

@Aaron - Вместо '.hover()' вы можете использовать события '.mouseenter' и' .mouseleave' отдельно, например: '$ (" # outerDiv "). Mouseenter (function() {$ (" #innerDiv: hidden "). slideDown();}); $ ("# containerDiv"). mouseleave (function() {$ ("# innerDiv: visible"). slideUp();}); ' –

1
$('#idOfLargeDiv').hover(
    function() { 
     $('#idOfSmallDiv').slideDown(); 
    }, 
    function() { 
     $('#idOfSmallDiv').slideUp(); 
    } 
);