jQuery $ .hover, используемый для подменю, вызывающий & # 8220; подпрыгивание & # 8221;
-
08-07-2019 - |
Вопрос
У меня возникли проблемы с методом наведения jQuery.
Вот соответствующий код JavaScript:
$("#navigation > li > ul").hide();
$("#navigation > li").hover(
function() {
$(this).children("ul").slideDown(125);
},
function() {
$(this).children("ul").slideUp(125);
}
);
Вот соответствующий HTML-код:
<ul id="navigation">
<li><a href="#">Top Level Item #1</a></li>
<li>
<a href="#">Top Level Item #2</a>
<ul>
<li><a href="#">Sub-Menu Item #2-1</a></li>
<li><a href="#">Sub-Menu Item #2-2</a></li>
<li><a href="#">Sub-Menu Item #2-3</a></li>
</ul>
</li>
</ul>
Всякий раз, когда вы наводите курсор мыши на элемент верхнего уровня, подменю в нем (если оно есть) будет выпадать с приятным, быстрым эффектом скольжения. Проблема заключается в том, что при наведении указателя мыши на "quot;" меню быстро и удерживайте курсор мыши там, где должно быть меню , но оно еще не дошло: затем меню нажмет " конец " анимации при наведении курсора мыши и возвращайтесь обратно в скрытое состояние, и повторяйте, пока не уберете мышь из раскрывающегося меню.
Решение
Может быть, добавление проверки в функцию mouseout
может помочь:
if( !$(this).children("ul").is(":animated") ){
$(this).children("ul").slideUp(125);
}
Другие советы
Вы можете попробовать использовать hoventIntent, плагин jQuery, который помогает определить намерение пользователя навести курсор на элементы.
http://cherne.net/brian/resources/jquery.hoverIntent.html р>
Я изменил твой пример с ним, и он, кажется, ведет себя намного лучше. Я добавил:
<script type="text/javascript" language="JavaScript" src="jquery.hoverIntent.minified.js"></script>
и изменил одну строку с помощью hover () на:
$("#navigation > li").hoverIntent(
Я не смог заставить его отскочить, и это было больше похоже на всплывающее меню с примененным поведением hoverIntent.
Наконец, вы можете попробовать использовать один из готовых плагинов меню jQuery, поскольку они уже проделали всю эту тяжелую работу за вас:)