Используя slideup, сдвиньте вниз эффекты jquery для выпадающего меню

У меня есть выпадающее меню, которое работает нормально, но я хочу добавить некоторые эффекты jquery, такие как анимация, скольжение, вниз,

в настоящее время я использую видимость скрытый и видимый, чтобы показать ul, как я могу использовать другой эффект на нем, ниже приведен код:

 <script type="text/javascript">
     $(document).ready(function () {
         $('.ul-links > li').bind('mouseover', openSubMenu);
         $('.ul-links > li').bind('mouseout', closeSubMenu);

         function openSubMenu() {
             $(this).find('ul').css('visibility', 'visible');
         };

         function closeSubMenu() {
             $(this).find('ul').css('visibility', 'hidden');
         };     });
  </script>

Я пытался с помощью:$('ul', this).slideDown(100); $('ul', this).slideUp(100); без успеха css:

.quiklinks .ul-links li ul
 {
position:absolute;
visibility: hidden;

margin: 0px;
padding-top:0px;
z-index: 1000;
top: 42px;
left:0px;
 }

Любая помощь будет высоко оценена

2 ответа

Решение

Вы можете использовать .animate() функция, а не .css() функция:

 $(document).ready(function () {
     $('.ul-links > li').bind('mouseover', openSubMenu);
     $('.ul-links > li').bind('mouseout', closeSubMenu);

     function openSubMenu() {
         $(this).find('ul').animate({opacity : 1}, 500);
     };

     function closeSubMenu() {
         $(this).find('ul').animate({opacity : 0}, 500);
     };
 });

Документация для .animate() можно найти здесь: http://api.jquery.com/animate/

Также есть несколько готовых анимаций:

$(this).find('ul').slideToggle(500);//http://api.jquery.com/slidetoggle/

$(this).find('ul').fadeToggle(500);//http://api.jquery.com/fadetoggle/

Вот jsfiddle для использования .slideToggle() а также .fadeToggle(): http://jsfiddle.net/jasper/wFrpe/

Ты можешь использовать .slideToggle() или же .fadeToggle(), Дополнительные эффекты могут быть достигнуты путем объединения нескольких из этих функций, или вы можете использовать плагин анимации jQuery для дополнительных эффектов.

Я также упростил привязку вашего события с помощью .hover()

 <script type="text/javascript">
     $(document).ready(function () {
         $('.ul-links > li').hover(toggleMenu, toggleMenu);

         function toggleMenu() {
             $(this).find('ul').stop(true, true).slideToggle();
         } 
     });
 </script>

Я заметил, что вы также используете visibility:hidden; в вашей таблице стилей. Вы должны удалить это, так как это противоречит тому, как jQuery использует стиль отображения, чтобы изменить видимость элемента.

Вы можете сделать это, вызвав hide() вместо этого:

 $('.ul-links > li').hide().hover(toggleMenu, toggleMenu);

Бонусный совет:

При использовании анимации всегда включайте .stop(true, true) перед ними, в противном случае у вас будут причуды, если пользователь будет взаимодействовать с ним много раз до завершения предыдущей анимации.

Другие вопросы по тегам