2010-05-10 3 views
10

что не так в этом коде? Я пытаюсь получить этот эффект: fadeOut(500) и attr('class','myClass') задерживается на 600 миллисекунд .. затем delay(600) снова и fadeIn(500). Задержки происходят правильно, но attr() не задерживается, он срабатывает, когда #myDiv все еще исчезает! :. (delay() и fadeOut() не задерживают attr() в очереди

$('#myDiv').fadeOut(500) 
      .delay(600) 
      .attr('class','myClass') 
      .delay(600) 
      .fadeIn(500); 

ответ

25

.delay() влияет только на анимацию или fx очереди (если не указать другую очередь конкретно) Имейте в виду, что сцепление и очередями 2 совершенно разных понятия, цепочки продолжает использование одного и того же JQuery установить, но это другое дело совсем, чем любые из очередей событий на элементах в этом наборе

чтобы затронувший .attr() вызова, вы должны добавить его в качестве обратного вызова той же очередь, используя .queue(), как это:.

$('#myDiv').fadeOut(500) 
      .delay(600) 
      .queue(function(next) { $(this).attr('class','myClass'); next(); }) 
      .delay(600) 
      .fadeIn(500); 

Также обратите внимание есть .addClass(), .removeClass() и .toggleClass() доступные методы, которые могут сделать это немного понятнее :)

+1

Я думаю, что вы должны вызвать '$ (это) .dequeue()' внутри функции. Из документов: * Обратите внимание, что при добавлении функции с .queue() мы должны гарантировать, что .dequeue() будет вызван так, чтобы выполнялась следующая функция в строке. * Anyway +1;) –

+0

@Felix - Woops I ' m обычно называют это последним пунктом в очереди, хороший catch :) –

+0

Hi Nick, большое спасибо за ваш ответ. Он работает, как вы говорите, однако следующие вызовы в очереди больше не работают .. :( EDIT увидел только сейчас комментарий Феликса .. большое спасибо вам обоим парням – Luca