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

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');
    };

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')) {...}

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");
});

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
$('selector').click(function() {
  if ($(':animated').length) {
    return false;
  }

  $("html, body").scrollTop(0);
});

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.