@angular/animations paketi v20.2 itibariyla kullanim disi birakilmistir (deprecated). Ayni surumde uygulamaniza animasyonlar eklemek icin yeni animate.enter ve animate.leave ozelligi de tanitilmistir. Bu yeni ozellikleri kullanarak, @angular/animations tabanli tum animasyonlari duz CSS veya JS animasyon kutuphaneleri ile degistirebilirsiniz. @angular/animations'i uygulamanizdan kaldirmak JavaScript paketinizin boyutunu onemli olcude azaltabilir. Yerel CSS animasyonlari genellikle donanim hizlandirmasindan yararlanabildiikleri icin ustun performans sunar. Bu rehber, kodunuzu @angular/animations'dan yerel CSS animasyonlarina yeniden duzenleme surecini anlatir.
Animasyon paketinde oldugu gibi, uygulamaniz genelinde paylasabileceginiz yeniden kullanilabilir animasyonlar olusturabilirsiniz. Animasyon paketinin surumu, paylasilmis bir TypeScript dosyasinda animation() fonksiyonunu kullanmanizi gerektiriyordu. Yerel CSS surumu benzerdir, ancak paylasilmis bir CSS dosyasinda yer alir.
Animasyon paketi, bir bilesen icinde state() fonksiyonunu kullanarak cesitli durumlar tanimlmaniza izin veriyordu. Ornekler, her ilgili durumun taniminda yer alan stillerle birlikte open veya closed durumu olabilir. Ornegin:
open veya closed durumunu tetiklemek, bileseninizdeki eleman uzerinde siniflari degistirerek yapilir. Bunu nasil yapacaginiza dair ornekleri sablon rehberimizde bulabilirsiniz.
Animasyon paketinin animate() fonksiyonu, sure, gecikme ve yumusaklik gibi zamanlama saglamaniza olanak tanir. Bu, CSS'de bircak CSS ozelligi veya kisayol ozellikleri kullanilarak yerel olarak yapilabilir.
CSS'de bir anahtar kare animasyonu icin animation-duration, animation-delay ve animation-timing-function belirtin veya alternatif olarak animation kisayol ozelligini kullanin.
Benzer sekilde, @keyframes kullanmayan animasyonlar icin transition-duration, transition-delay, transition-timing-function ve transition kisayolunu kullanabilirsiniz.
Animasyon paketi, trigger() fonksiyonunu kullanarak tetikleyiciler belirtmeyi ve tum durumlarinizi onun icinde ic ice yerlestirmeyi gerektiriyordu. Yerel CSS ile buna gerek yoktur. Animasyonlar CSS stilleri veya siniflari degistirerek tetiklenebilir. Bir sinif bir elemanda mevcut oldigunda, animasyon gerceklesir. Sinifi kaldirmak, elemani o eleman icin tanimlanmis CSS'e geri dondurecektir. Bu, ayni animasyonu yapmak icin onemli olcude daha az kodla sonuclanir. Iste bir ornek:
Animasyon paketi, tanimladiginiz durumlari dizeler araciligiyla bir gecisle eslestirme yetenegini sunuyordu. Ornegin, aciktan kapaliya animasyonlamak open => closed seklinde olurdu. Herhangi bir durumu hedef durumla eslestirmek icin * => closed gibi joker karakterler kullanabilirsiniz ve giris ve cikis durumlari icin void anahtar sozcugu kullanilabilir. Ornegin: bir eleman gorünumden ayrilirken * => void veya eleman gorünume girerken void => *.
Bu durum esleme kaliplari, dogrudan CSS ile animasyon yaparken hic gerekli degildir. Elemanlara ayarladiginiz siniflara ve/veya stillere gore hangi gecislerin ve @keyframes animasyonlarinin uygulanacagini yonetebilirsiniz. Ayrica elemanin DOM'a girdigi andaki gorunumunu kontrol etmek icin @starting-style ekleyebilirsiniz.
Animasyon paketi, height: auto'ya animasyon yapmak gibi tarihsel olarak animasyonlanmasi zor olan seyleri animasyonlama yetenegini sunuyordu. Artik bunu saf CSS ile de yapabilirsiniz.
Daha once bahsedilen :enter ve :leave'e ek olarak, :increment ve :decrement de vardir. Bunlari da siniflar ekleyip kaldirarak animasyonlayabilirsiniz. Animasyon paketinin yerlesik takma adlarinin aksine, degerler yukarı veya asagi gittiginde siniflarin otomatik olarak uygulanmasi yoktur. Uygun siniflari programatik olarak uygulayabilirsiniz. Iste bir ornek:
Animasyon paketinden farkli olarak, belirli bir bilesen icinde birden fazla animasyon belirlendiginde, hicbir animasyonun digerine onceligi yoktur ve hicbir sey herhangi bir animasyonun calismesini engellemez. Animasyonlarin siralanmasi, CSS animasyonunuzun tanimi, animasyon/gecis gecikmesi ve/veya sonraki animasyonlanacak CSS'i eklemeyi islemek icin animationend veya transitionend kullanilarak yonetilmelidir.
Bu sinifi bir elemana uygulamak, o eleman uzerindeki herhangi bir animasyonun calismesini engeller. Alternatif olarak, bu davranisi uygulamak icin bunu tum DOM'unuza veya DOM'unuzun bir bolumune kapsayabilirsiniz. Ancak bu, animasyon olaylarinin calismesini engeller. Eleman kaldirma icin animasyon olaylarini bekliyorsaniz, bu cozum ise yaramaz. Gecici bir cozum, sureleri 1 milisaniyeye ayarlamaktir.
Daha az animasyon tercih eden kullanicilar icin hicbir animasyonun calmamasini saglamak icin prefers-reduced-motion medya sorgusunu kullanin.
Programatik olarak animasyon siniflari eklemeyi engelleyin
Animasyon paketi, animasyon bittiginde bir seyler yapmak istemeniz durumunda kullanmaniz icin geri cagirmalar sunuyordu. Yerel CSS animasyonlarinin da bu geri cagirmalari vardir.
Web Animations API bircok ek islev sunar. Mevcut tum animasyon API'lerini gormek icin belgelere goz atin.
NOTE: Bu geri cagirmalarla kabarciklanma sorunlarina dikkat edin. Alt ve ust elemanlari animasyonluyorsaniz, olaylar alt elemanlardan ust elemanlara dogru kabarciklanir. Bir alt dugumden kabarciklanan bir olaya degil, istediginiz olay hedefine yanit verdiginizden emin olmak icin yayilimi durdurun veya olay icindeki daha fazla ayrinti inceleyin. Dogru dugumlere sahip oldugunuzu dogrulamak icin animationname ozelligini veya gecisi yapilan ozellikleri inceleyebilirsiniz.
Animasyon paketinde, document.querySelector()'a benzer bir CSS sinif adi ile belirli elemanlari bulmak icin query() fonksiyonunu kullanarak belirli elemanlari hedefleyebilirdiniz. Yerel CSS animasyon dunyasinda buna gerek yoktur. Bunun yerine, alt siniflari hedeflemek ve istediginiz transform veya animation'i uygulamak icin CSS secicilerinizi kullanabilirsiniz.
Bir sablon icindeki alt dugumlerin siniflari icin degistirmek icin, animasyonlari dogru noktalarda eklemek icin sinif ve stil baglamalarini kullanabilirsiniz.
stagger() fonksiyonu, kademeli bir etki olusturmak icin bir listedeki her ogenin animasyonunu belirtilen bir sure geciktirmenize olanak taniyordu. Bu davranisi animation-delay veya transition-delay kullanarak yerel CSS'de kopyalayabilirsiniz. Bu CSS'nin nasil gorunebilecegine dair bir ornek.
Animasyon paketinde ayni anda birden fazla animasyon oynatmak icin group() fonksiyonu vardir. CSS'de animasyon zamanlamasi uzerinde tam kontrol sahibisiniz. Tanimlanmis birden fazla animasyonunuz varsa, hepsini ayni anda uygulayabilirsiniz.
Listede yeniden siralanan ogeler, daha once aciklanan teknikleri kullanarak kutudan cikar cikmaz calisir. Ek ozel bir calisma gerekmez. Bir @for dongusundeki ogeler duzgun sekilde kaldirilip yeniden eklenecek, bu da giris animasyonlari icin @starting-styles kullanilarak animasyonlari tetikleyecektir. Alternatif olarak, ayni davranis icin animate.enter kullanabilirsiniz. Yukaridaki ornekte gorulduğu gibi elemanlar kaldirilirken animasyonlamak icin animate.leave kullanin.
AnimationPlayer sinifi, duraklatma, oynatma, yeniden baslatma ve bir animasyonu kod araciligiyla bitirme gibi daha gelismis seyler yapabilmek icin bir animasyona erisim saglar. Tum bunlar yerel olarak da ele alinabilir.
Element.getAnimations() kullanarak bir elemandaki animasyonlari dogrudan alabilirsiniz. Bu, o elemandaki her Animation'in bir dizisini dondurur. Animasyon paketinin AnimationPlayer'inin sundugu seylerden cok daha fazlasini yapmak icin Animation API'sini kullanabilirsiniz. Buradan cancel(), play(), pause(), reverse() ve cok daha fazlasini yapabilirsiniz. Bu yerel API, animasyonlarinizi kontrol etmeniz icin ihtiyaciniz olan her seyi saglamalidir.