CSS3 animasyonunun tamamlanmasıyla ilgili bir geri arama var mı?


92

Css3 animasyonu durumunda bir geri arama işlevi uygulamanın herhangi bir yolu var mı? Javascript animasyonu olması durumunda mümkündür ancak css3'te yapmanın bir yolunu bulamamaktadır.

Görebildiğim bir yol, animasyon süresinden sonra geri aramayı yürütmek, ancak bu her zaman animasyon bittikten hemen sonra çağrılacağından emin olmuyor. Tarayıcının kullanıcı arayüzü sırasına bağlı olacaktır. Daha sağlam bir yöntem istiyorum. Bir ipucu?



Basit bir CSS eylemi yapmak istiyorsanız, örneğin, geçişten sonra öğeyi gizlemek istiyorsanız, belki bir geri aramaya ihtiyacınız yoktur ve bunun yerine, sorununuzu animasyonun ana karesiyle çözebilirsiniz.
Madmadi

Yanıtlar:


132

Evet var. Geri arama bir olaydır, bu nedenle onu yakalamak için bir olay dinleyicisi eklemeniz gerekir. Bu jQuery ile bir örnektir:

$("#sun").bind('oanimationend animationend webkitAnimationEnd', function() { 
   alert("fin") 
});

Veya saf js:

element.addEventListener("webkitAnimationEnd", callfunction,false);
element.addEventListener("animationend", callfunction,false);
element.addEventListener("oanimationend", callfunction,false);

Canlı demo: http://jsfiddle.net/W3y7h/


3
IE10 için bu 'MSAnimationEnd' (bkz var msdn.microsoft.com/en-us/ie/hh272902#_CSSAnimations )
Martin Wittemann

6
O var transitionend, değil animationend.

13
@MichaelJones hayır, bu css3 geçişleri içindir. soru animasyonlarla ilgiliydi.
joshvermaire

4
@MartinWittemann IE10 final artık animationend msdn.microsoft.com/en-us/library/ie/… kullanıyor . Kod Chrome ve FF 14'de çalışır @Husky, keman güncellenen bkz jsfiddle.net/W3y7h
methodofaction

1
Kopyası stackoverflow.com/questions/9255279/... daha eksiksiz bir çözümü vardır
vanthome

4

CSS3 geçişlerinizi / tarayıcı uyumluluklarınızı da yöneten bir geri arama yapmanın kolay bir yolu jQuery Transit Eklentisi olacaktır . Misal:

//Pulsing, moving element
$("#element").click( function () {
    $('#element').transition({ opacity: 0, x: '75%' }, function () { $(this).transition({ opacity: 1, x: '0%' }).trigger("click"); });
});

JS Fiddle Demosu


1
API spesifikasyonunu jQuery animate ile paylaşması için bonus puan, ancak yine de CSS animasyonlarının donanımla oluşturulmuş akıcılığından yararlanıyor. JQuery animate'i hemen hemen her yerde bununla değiştirdik.
logan
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.