Лучшим способом сделать это было бы использование ненавязчивого скрипта, главное, чтобы вы вызывали .stop()
вызов для остановки предыдущей анимации, например:
<script type="text/javascript">
function hoverIn(target, speed){
$(target).stop(true, true).fadeIn(speed);
}
function hoverOut(target, speed){
$(target).stop(true, true).fadeOut(speed);
}
</script>
Это все еще проблема, потому что mouseover
и mouseout
загораются при входе / выходе из ребенка. Однако .hover()
использует mouseenter
и mouseleave
, которые не страдают той же проблемой и устранят вашу проблему "вибрации".
Ненавязчивая версия выглядит так:
$(function() {
$("ul > li").hover(function() {
$(this).find("ul").stop(true, true).fadeIn('fast');
}, function() {
$(this).find("ul").stop(true, true).fadeOut('fast');
});
});
Вы можете увидеть это здесь , или даже более короткую версию:
$(function() {
$("ul > li").hover(function() {
$(this).find("ul").stop(true, true).animate({opacity: 'toggle'}, 'fast');
});
});
Вы можете проверить это здесь , обратите внимание, что все эти ненавязчивые подходы не используют встроенный JavaScript и работают для нескольких дочерних меню.