2015-10-22 3 views
0

У меня есть меню с анимацией slideDown/slideup, прикрепленной к событию зависания.JQuery подождать до окончания анимации до начала новой

Если я нахожусь над следующим положением меню, в то время как предыдущий все еще анимирован с помощью slideDown, я хочу дождаться завершения SlideDown и только затем запустить slideUp для текущей позиции.

Я попытался использовать объект обещания, но он вообще не работает.

$('.menu-2>ul>li').each(function(){ 
    $(this).hover(
     function(){ 
      var choice = $('ul', this); 
      ('.menu-2>ul>li>ul').promise().done(function() { 
       choice.slideDown(); 

      }); 

     }, 
     function(){ 
      $('ul', this).slideUp(200); 
     } 
    ); 
}); 
+0

Моя первая мысль, что это, вероятно, связано с документом готовым не используется. Проверьте это https://learn.jquery.com/using-jquery-core/document-ready/ – FirebladeDan

+0

Не совсем, я просто вставил часть кода. Он работает правильно без объекта обещания, анимации привязаны к событию наведения. – user3667832

ответ

1

Вы можете добавить обратный вызов после окончания слайд-шоу. Попробуйте пример:

choice.slideDown("fast",function(){your function}) 

это вызов только анимация закончить

UPDATE

$('.menu-2>ul>li').each(function(){ 
    $(this).hover(
     function(){ 
      var choice = $('ul', this); 
      ('.menu-2>ul>li>ul').promise().done(function() { 
       choice.slideDown(500); 

      }); 

     }, 
     function(){ 
      $('ul', this).delay(500).slideUp(200); 
     } 
    ); 
}); 
+0

Как подключить этот обратный вызов, чтобы навести его (его часть)? – user3667832

+0

У меня есть задержка между обоими слайдами. Пожалуйста попробуйте –

Смежные вопросы