İyi tasarlanmış animasyonlar uygulamanızı daha sezgisel ve etkileşimli hale getirebilir, ancak sadece görsel bir unsur değildir. Animasyonlar uygulamanızı ve kullanıcı deneyimini birçok şekilde iyileştirebilir:
- Animasyonlar olmadan, web sayfası geçişleri ani ve rahatsız edici görünebilir
- Hareket, kullanıcı deneyimini büyük ölçüde geliştirir, bu nedenle animasyonlar kullanıcılara uygulamanın eylemlerine verdiği yanıtı algılama şansı tanır
- İyi animasyonlar, kullanıcının dikkatini bir iş akışı boyunca düzgünce yönlendirebilir
Angular, uygulamanızın elemanlarını animasyonlamak için animate.enter ve animate.leave sağlar. Bu iki özellik, uygun zamanlarda giriş ve çıkış CSS sınıflarını uygular veya üçüncü parti kütüphanelerden animasyonlar uygulamak için fonksiyonları çağırır. animate.enter ve animate.leave yönerge değildir. Bunlar doğrudan Angular derleyicisi tarafından desteklenen özel API'lerdir. Elemanlarda doğrudan kullanılabilir ve ayrıca bir ana bağlama olarak da kullanılabilir.
animate.enter
DOM'a giren elemanları animasyonlamak için animate.enter kullanabilirsiniz. Giriş animasyonlarını geçişler veya anahtar kare animasyonları ile CSS sınıfları kullanarak tanımlayabilirsiniz.
Animasyon tamamlandığında, Angular animate.enter'da belirttiğiniz sınıf veya sınıfları DOM'dan kaldırır. Animasyon sınıfları yalnızca animasyon aktifken mevcuttur.
NOTE: Bir elemanda birden fazla anahtar kare animasyonu veya geçiş özelliği kullanıldığında, Angular tüm sınıfları yalnızca en uzun animasyon tamamlandıktan sonra kaldırır.
animate.enter'i kontrol akışı veya dinamik ifadeler gibi diğer Angular özellikleriyle kullanabilirsiniz. animate.enter hem tek bir sınıf dizesini (boşlukla ayrılmış birden fazla sınıf ile) hem de bir sınıf dizesi dizisini kabul eder.
CSS geçişleri kullanımı hakkında kısa bir not: Anahtar kare animasyonları yerine geçişleri kullanmayı seçerseniz, animate.enter ile elemana eklenen sınıflar geçişin hedef durumunu temsil eder. Temel eleman CSS'iniz, animasyon çalışmadığı zaman elemanın nasıl görüneceğini belirler, bu da muhtemelen CSS geçişinin son durumuna benzer. Bu nedenle, geçişinizin çalışması için uygun bir başlangıç durumuna sahip olmak için yine de @starting-style ile eşleştirmeniz gerekir.
animate.leave
DOM'dan ayrılan elemanları animasyonlamak için animate.leave kullanabilirsiniz. Çıkış animasyonlarını dönüşümler veya anahtar kare animasyonları ile CSS sınıfları kullanarak tanımlayabilirsiniz.
Animasyon tamamlandığında, Angular animasyonlu elemanı DOM'dan otomatik olarak kaldırır.
NOTE: Bir elemanda birden fazla anahtar kare animasyonu veya geçiş özelliği kullanıldığında, Angular elemanı yalnızca bu animasyonların en uzunu tamamlandıktan sonra kaldırır.
animate.leave sinyallerle ve diğer bağlamalarla da kullanılabilir. animate.leave'i tek bir sınıf veya birden fazla sınıf ile kullanabilirsiniz. Boşluklu basit bir dize veya bir dize dizisi olarak belirtin.
Eleman kaldırma sırası
animate.leave animasyonlarının nasıl çalıştırıldığı ve bir animasyonun ne zaman gerçekleşeceği konusunda bazı incelikler vardır. animate.leave, kaldırılan elemanın üzerine yerleştirilmişse çalışır ve animate.leave aynı bileşen şablonu içinde kaldırılan elemanın bir alt öğesi olan bir elemana yerleştirilmişse, bu alt animate.leave animasyonları üst düğüm DOM'dan kaldırılmadan önce gerçekleşir. Bu, üst düğüm erkenden kaybolmadan alt elemanları güvenle animasyonla kaldırabilmenizi sağlar.
IMPORTANT: Alt animasyonlar yalnızca aynı bileşen şablonu içindeki elemanlar için tetiklenir. Kaldırılan bir eleman alt bileşenler içeriyorsa, bu alt bileşen şablonları içinde tanımlanan animate.leave animasyonları üst eleman kaldırılmadan önce çalışmaz. Bir alt bileşeni kaldırılırken animasyonla göstermek için bunun yerine animate.leave'i doğrudan üst şablon içinde alt bileşenin host elemanına uygulayın ya da animasyonun tetiklenmesini alt bileşende programatik olarak yönetip üst elemanın kaldırılmasını bu animasyon tamamlanana kadar geciktirin.
Olay bağlamaları, fonksiyonlar ve üçüncü parti kütüphaneler
Hem animate.enter hem de animate.leave, fonksiyon çağrılarına izin veren olay bağlama sözdizimini destekler. Bu sözdizimini bileşen kodunuzdaki bir fonksiyonu çağırmak veya GSAP, anime.js veya herhangi bir JavaScript animasyon kütüphanesi gibi üçüncü parti animasyon kütüphanelerini kullanmak için kullanabilirsiniz.
$event nesnesi AnimationCallbackEvent tipindedir. Elemanı target olarak içerir ve animasyon bittiğinde çerçeveye bildirimde bulunmak için bir animationComplete() fonksiyonu sağlar.
IMPORTANT: animate.leave kullanırken Angular'ın elemanı kaldırması için animationComplete() fonksiyonunu mutlaka çağırmanız gerekir.
animate.leave kullanırken animationComplete() çağırmazsanız, Angular dört saniyelik bir gecikmeden sonra fonksiyonu otomatik olarak çağırır. MAX_ANIMATION_TIMEOUT tokenini milisaniye cinsinden sağlayarak gecikme süresini yapılandırabilirsiniz.
{ provide: MAX_ANIMATION_TIMEOUT, useValue: 6000 }
Eski Angular animasyonlarıyla uyumluluk
Eski animasyonları animate.enter ve animate.leave ile aynı bileşen içinde kullanamazsınız. Bunu yapmak, giriş sınıflarının eleman üzerinde kalmasına veya ayrılan düğümlerin kaldırılmamasına yol açar. Aynı uygulama içinde hem eski animasyonları hem de yeni animate.enter ve animate.leave animasyonlarını kullanmak ise sorun değildir. Tek istisna içerik projeksiyonudur. Eski animasyonları olan bir bileşenden animate.enter veya animate.leave olan başka bir bileşene içerik projeksiyonu yapıyorsanız veya tam tersi, bu aynı bileşende birlikte kullanılıyormuş gibi aynı davranışa yol açar. Bu desteklenmemektedir.
Test etme
TestBed, test ortamınızda animasyonları etkinleştirmek veya devre dışı bırakmak için yerleşik destek sağlar. CSS animasyonları çalışmak için bir tarayıcı gerektirir ve API'lerin çoğu test ortamında mevcut değildir. Varsayılan olarak TestBed, test ortamlarınızdaki animasyonları sizin için devre dışı bırakır.
Animasyonların bir tarayıcı testinde, örneğin uçtan uca bir testte animasyonlandığını test etmek istiyorsanız, test yapılandırmanızda animationsEnabled: true belirterek TestBed'i animasyonları etkinleştirecek şekilde yapılandırabilirsiniz.
TestBed.configureTestingModule({animationsEnabled: true});
Bu, test ortamınızda animasyonları normal şekilde davranacak şekilde yapılandırır.
NOTE: Bazı test ortamları animationstart, animationend ve bunların geçiş olay karşılıkları gibi animasyon olaylarını yayınlamaz.
Angular animasyonları hakkında daha fazla bilgi
Aşağıdakilerle de ilgilenebilirsiniz: