delay () и fadeOut () не задерживают attr () в очереди - PullRequest
10 голосов
/ 11 мая 2010

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

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

1 Ответ

25 голосов
/ 11 мая 2010

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

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

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

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

...