у меня div
с классом .catalog-btn
. У него есть брат .catalog-mnu
(выпадающее меню) с display: none
Когда я hover
на .catalog-btn
, slideDown()
запускается для .catalog-mnu
.
.catalog-mnu
появляется под .catalog-btn
. Он имеет :before
псевдокласс, который создает div
с шириной и высотой, равной размеру .catalog-btn
. Итак, что происходит: пользователь наводит на кнопку, появляется выпадающее меню, в этом меню есть элемент before
, который закрывает кнопку. Так что теперь кнопка закрыта выпадающим меню .catalog-mnu
. Если mouseleave
вызвано для выпадающего меню, slideUp()
скроет его.
Вот HTML:
<div class="catalog-btn">
<div class="catalog-btn__text">Каталог оборудования</div>
</div>
<div class="catalog-mnu">
<ul>
<li>Link</li>
<li>Link</li>
<li>Link</li>
</ul>
</div>
Вот код jquery:
$(document).on('mouseenter', '.catalog-btn', function() {
$(".catalog-mnu.catalog-mnu-desktop").stop().slideDown(250);
});
$(document).on('mouseleave', '.catalog-mnu.catalog-mnu-desktop', function() {
$(".catalog-mnu.catalog-mnu-desktop").stop().slideUp(250);
});
Проблема заключается в следующем: если вы наведите курсор на кнопку, но будете очень быстро двигать мышь, до завершения анимации slideDown()
появится раскрывающееся меню, но в раскрывающемся списке не будет "mouseenter"
. -меню. Таким образом, курсор находится не в выпадающем меню, а меню видно (хотя оно должно быть видно только при наведении). Меню не скроется, пока вы на самом деле не наведите его, а затем не будете двигать мышь.
Как я могу изменить код jquery для решения этой головоломки? Я думаю, что проблема в анимации. При наведении на кнопку - slideDown()
запускается. Но если mouseleave
произойдет до завершения анимации - событие 'mouseenter'
не будет запущено. Если не двигать курсор быстро - все работает как положено.