Jak dowiedzieć się za pomocą jQuery, czy element jest animowany?

102

Próbuję przenieść niektóre elementy na stronę, ale w czasie trwania animacji chcę, aby do elementu zastosowano „przepełnienie: ukryte”, a po zakończeniu animacji „przepełnienie” z powrotem na „auto”.

Wiem, że jQuery ma funkcję narzędzia, która określa, czy jakiś element jest animowany, ale nie mogę go znaleźć nigdzie w dokumentacji


źródło

Odpowiedzi:

200
if( $(elem).is(':animated') ) {...}

Więcej informacji : https://api.jquery.com/animated-selector/


Lub:

$(elem)
    .css('overflow' ,'hidden')
    .animate({/*options*/}, function(){
        // Callback function
        $(this).css('overflow', 'auto');
    };
James
źródło
tak to było to, dzięki. jak mogłem to przegapić? cholera, starzeję się
FYI, jeśli nie chcesz ryzykować zastąpienia swoich stylów CSS programowaniem „overflow: auto” w wywołaniu zwrotnym, po prostu użyj .css('overflow', ''). Przekazanie pustego ciągu generalnie całkowicie usuwa tę właściwość ze stylu elementu. Nie jestem pewien, czy jest to udokumentowane zachowanie, ale jest to bardzo przydatna sztuczka.
Ward DS
2
Myślę, że nie obsługuje animacji CSS.
Gqqnbig
5

Alternatywnie, aby sprawdzić, czy coś nie jest animowane, możesz po prostu dodać znak „!”:

if (!$(element).is(':animated')) {...}
Tim
źródło
To bardzo nieprawda ... Przeciwieństwem jquery jest „nie jest”. „not” usuwa przefiltrowane elementy z obiektu jquery. Jeśli chcesz sprawdzić nieanimowany obiekt, to robiszif (!$(element).is(':animated')) {...}
amosmos
1
@amosmos Odpowiedź została zredagowana i zatwierdzona przez społeczność. Przywróciłem ją do stanu, w którym była poprawna.
Bill
2
Świetnie, tylko teraz jest to duplikat zaakceptowanej odpowiedzi. BTW, co to znaczy zatwierdzone przez społeczność?
amosmos
@amosmos stop trolling
Eric Cicero
1

jeśli używasz cssanimacji i przypisujesz animację przy użyciu określonego class name, możesz to sprawdzić w ten sposób:

if($("#elem").hasClass("your_animation_class_name")) {}

Ale upewnij się, że usuwasz nazwę klasy, która obsługuje animację, po zakończeniu animacji!

Ten kod może służyć do usuwania class namepo zakończeniu animacji:

$("#elem").on('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend',
function(){ 
        $(this).removeClass("your_animation_class_name");
});
Ari
źródło
OP używa animacji jQuery.
Michał Perłakowski
sugeruję tylko alternatywę. Czy chodziło Ci o animację?
Ari
Tak, miałem na myśli animację. IMO Twoja odpowiedź jest całkowicie nie na temat.
Michał Perłakowski
0

Jeśli chcesz zastosować css do animowanych elementów, możesz użyć :animatedpseudo selektora i zrobić to w ten sposób:

$("selector").css('overflow','hidden');
$("selector:animated").css('overflow','auto');

źródło: https://learn.jquery.com/using-jquery-core/selecting-elements/

Szczęściarz
źródło
0
$('selector').click(function() {
  if ($(':animated').length) {
    return false;
  }

  $("html, body").scrollTop(0);
});
anand vishwakarma
źródło
Chociaż ten kod może odpowiedzieć na pytanie, dostarczenie dodatkowego kontekstu dotyczącego tego, jak i / lub dlaczego rozwiązuje problem, poprawiłoby długoterminową wartość odpowiedzi. Przeczytaj ten poradnik odpowiedzi, aby udzielić dobrej odpowiedzi.
thewaywewewewewewby