JQuery ile bir öğenin animasyonlu olup olmadığını nasıl anlarım?


102

Sayfadaki bazı öğeleri taşımaya çalışıyorum ve animasyonun gerçekleştiği süre boyunca bir elemnt'e "taşma: gizli" uygulanmasını ve animasyon tamamlandığında "taşma" nın "otomatik" e geri dönmesini istiyorum.

JQuery'nin bazı öğelerin canlandırılıp canlandırılmadığını belirleyen bir yardımcı program işlevi olduğunu biliyorum, ancak bunu belgelerin hiçbir yerinde bulamıyorum

Yanıtlar:


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

Daha fazla bilgi : https://api.jquery.com/animated-selector/


Veya:

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

evet buydu, teşekkürler. nasıl özleyebilirim? lanet olsun, yaşlanıyorum

Bilginize, geri aramada "overflow: auto" programlayarak CSS stillerinizin üzerine yazma riskini almak istemiyorsanız, basitçe kullanın .css('overflow', ''). Boş bir dizenin iletilmesi genellikle bu özelliği öğenin stilinden tamamen kaldırır. Bunun belgelenmiş bir davranış olup olmadığından emin değilim, ama çok faydalı bir hile.
Ward DS

2
CSS animasyonlarını desteklediğini sanmıyorum.
Gqqnbig

5

Alternatif olarak, bir şeyin animasyonlu olup olmadığını test etmek için bir "!" Ekleyebilirsiniz:

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

Bu pek doğru değil ... jquery'nin zıttı 'eşittir' değil 'değil. 'not', filtrelenmiş öğeleri jquery nesnesinden kaldırır. Eğer canlandırılmamış nesneyi kontrol etmek istiyorsanız yapmalısınızif (!$(element).is(':animated')) {...}
amosmos

1
@amosmos Cevap düzenlendi ve topluluk onaylandı .. Cevabı doğru olduğu yere geri döndürdüm.
Bill

2
Harika, ancak şimdi kabul edilen cevabın bir kopyası. BTW, topluluğun onayladığı anlamına gelir?
amosmos

@amosmos trollingi durdur
Eric Cicero

1

cssAnimasyon kullanıyorsanız ve animasyonu belirli bir şekilde class nameatarsanız, şu şekilde kontrol edebilirsiniz:

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

Ancak, animasyon bittikten sonra animasyonu işleyen sınıf adını kaldırdığınızdan emin olun!

Bu kod class name, animasyon bittikten sonra kaldırmak için kullanılabilir :

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

OP, jQuery animasyonu kullanıyor.
Michał Perłakowski

sadece bir alternatif öneriyor. Ve animasyon mu demek istedin?
Ari

Evet, animasyon demek istedim. IMO cevabınız tamamen konu dışı.
Michał Perłakowski


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

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

Bu kod soruyu yanıtlayabilirken, sorunun nasıl ve / veya neden çözüldüğüne ilişkin ek bağlam sağlamak, yanıtlayanın uzun vadeli değerini artıracaktır. Kaliteli bir yanıt sağlamak için lütfen bu nasıl yanıtlanacağını okuyun.
thewaywewere
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.