Wie finde ich mit jQuery heraus, ob ein Element animiert wird?


101

Ich versuche, einige Elemente auf der Seite zu verschieben. Während der Animation möchte ich "Überlauf: versteckt" auf ein Element anwenden und "Überlauf" zurück auf "Auto", sobald die Animation abgeschlossen ist.

Ich weiß, dass jQuery eine Dienstprogrammfunktion hat, die bestimmt, ob ein Element animiert wird, aber ich kann es nirgendwo in den Dokumenten finden

Antworten:


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

Weitere Informationen : https://api.jquery.com/animated-selector/


Oder:

$(elem)
    .css('overflow' ,'hidden')
    .animate({/*options*/}, function(){
        // Callback function
        $(this).css('overflow', 'auto');
    };

Ja das war es, danke. wie könnte ich es vermissen? Verdammt, ich werde alt

Zu Ihrer Information, wenn Sie nicht riskieren möchten, Ihre CSS-Stile zu überschreiben, indem Sie im Rückruf "overflow: auto" programmieren, verwenden Sie einfach .css('overflow', ''). Durch das Übergeben einer leeren Zeichenfolge wird diese Eigenschaft im Allgemeinen vollständig aus dem Stil des Elements entfernt. Ich bin mir nicht sicher, ob dies ein dokumentiertes Verhalten ist, aber es ist ein sehr nützlicher Trick.
Ward DS

2
Ich glaube nicht, dass es CSS-Animationen unterstützt.
Gqqnbig

5

Um zu testen, ob etwas nicht animiert ist, können Sie alternativ einfach ein "!" Hinzufügen:

if (!$(element).is(':animated')) {...}

Dies ist sehr nicht wahr ... Das Gegenteil von jquery "ist" ist nicht "nicht". 'not' entfernt gefilterte Elemente aus dem jquery-Objekt. Wenn Sie nach nicht animierten Objekten if (!$(element).is(':animated')) {...}
suchen

1
@amosmos Die Antwort wurde bearbeitet und von der Community genehmigt. Ich habe sie zurückgesetzt, wo sie korrekt war.
Bill

2
Großartig, nur jetzt ist es ein Duplikat der akzeptierten Antwort. Übrigens, was bedeutet es, von der Community genehmigt zu werden?
Amosmos

@amosmos aufhören zu trollen
Eric Cicero

1

Wenn Sie eine cssAnimation verwenden und die Animation mithilfe einer bestimmten Animation zuweisen class name, können Sie dies folgendermaßen überprüfen:

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

Stellen Sie jedoch sicher, dass Sie den Klassennamen entfernen, der die Animation verarbeitet, nachdem die Animation beendet ist!

Mit diesem Code können Sie Folgendes entfernen, class namenachdem die Animation beendet wurde:

$("#elem").on('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend',
function(){ 
        $(this).removeClass("your_animation_class_name");
});

OP verwendet jQuery animaiton.
Michał Perłakowski

Ich schlage nur eine Alternative vor. Und meintest du Animation?
Ari

Ja, ich meinte Animation. IMO ist Ihre Antwort völlig unangebracht.
Michał Perłakowski


0
$('selector').click(function() {
  if ($(':animated').length) {
    return false;
  }

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

Während dieser Code die Frage möglicherweise beantwortet, würde die Bereitstellung eines zusätzlichen Kontexts darüber, wie und / oder warum das Problem gelöst wird, den langfristigen Wert der Antwort verbessern. Bitte lesen Sie diese Anleitung, um eine qualitativ hochwertige Antwort zu erhalten.
thewaywewere
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.