задержка () и постепенное исчезновение () не задерживает attr () в очереди

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

$('#myDiv').fadeOut(500)
           .delay(600)
           .attr('class','myClass')
           .delay(600)
           .fadeIn(500);  
10
задан Luca 12 November 2016 в 15:04
поделиться

1 ответ

.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 () , которые могут сделать это немного чище :)

{ {1}}
25
ответ дан 3 December 2019 в 16:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: