2009-04-07 4 views
94

Ich versuche, einige Elemente auf der Seite zu verschieben, und während der Zeit, die die Animation auftritt, möchte ich "overflow: hidden" auf ein Element angewendet haben, und "overflow" zurück zu "auto", sobald die Animation abgeschlossen ist .Wie finde ich mit jQuery heraus, ob ein Element animiert wird?

ich jQuery wissen hat eine Nutzenfunktion, die ein Element bestimmt, ob animiert werden, aber ich kann es nicht überall in der Dokumentation finden

+2

Verwenden Sie Rückrufe für diese Aufgabe. – Mork0075

Antwort

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

Mehr Informationen: http://docs.jquery.com/Selectors/animated


Oder:

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

ja das war es, danke. Wie könnte ich es vermissen? Verdammt, ich werde alt –

+0

FYI, wenn Sie nicht riskieren, Ihre CSS-Stile zu überschreiben, indem Sie "overflow: auto" im Callback programmieren, benutzen Sie einfach '.css ('overflow', '')'. Wenn Sie eine leere Zeichenfolge übergeben, wird diese Eigenschaft normalerweise vollständig aus dem Stil des Elements entfernt. Nicht sicher, ob dies dokumentiertes Verhalten ist, aber es ist ein sehr nützlicher Trick. –

+0

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

5

Alternativ , Testen, ob etwas nicht animiert, können Sie einfach hinzufügen, ein „!“:

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

Das ist sehr nicht wahr ... Das Gegenteil von jQuery ist "nicht". 'not' entfernt gefilterte Elemente aus dem jquery-Objekt. Wenn Sie nach nicht animierten Objekten suchen möchten, tun Sie 'if (! $ (Element) .is (': animierte')) {...}' – amosmos

+1

@amosmos Die Antwort wurde bearbeitet und Community genehmigt .. Ich habe gerollt es zurück, wo es richtig war. – Bill

+1

Großartig, nur jetzt ist es ein Duplikat der angenommenen Antwort. BTW was bedeutet es Community genehmigt? – amosmos

-1

wenn Sie css Animation und weisen Sie die Animation verwenden, indem spezifische class name verwenden, dann können Sie es wie folgt kontrollieren:

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

Aber stellen Sie sicher, dass Sie den Klassennamen entfernen, der die Animation behandelt, nachdem die Animation beendet ist!

können Dieser Code wird die class name, nachdem die Animation fertig entfernen verwendet werden:

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

OP verwendet jQuery-Animation. –

+0

schlägt nur eine Alternative vor. Und hast du Animation gemeint? – KeepMove

+0

Ja, ich meinte Animation. IMO deine Antwort ist völlig außer Thema. –

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

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

Während dieser Code die Frage beantworten kann, würde das Bereitstellen eines zusätzlichen Kontextes, wie und/oder warum er das Problem löst, den langfristigen Wert der Antwort verbessern. Bitte lesen Sie diese [how-to-answer] (http://stackoverflow.com/help/how-to-answer) für eine qualitativ hochwertige Antwort. – thewaywewere

Verwandte Themen