animate.enter ve animate.leave ile uygulamalarınızı animasyonlama
Iyi tasarlanmis animasyonlar uygulamanizi daha sezgisel ve etkilesimli hale getirebilir, ancak sadece gorsel bir unsur degildir.
Animasyonlar uygulamanizi ve kullanici deneyimini bircok sekilde iyilestirebilir:
Animasyonlar olmadan, web sayfasi gecisleri ani ve rahatsiz edici gorunebilir
Hareket, kullanici deneyimini buyuk olcude gelistirir, bu nedenle animasyonlar kullanicilara uygulamanin eylemlerine verdigi yaniti algilama sansi tanir
Iyi animasyonlar, kullanicinin dikkatini bir is akisi boyunca duzgunce yonlendirebilir
Angular, uygulamanizin elemanlarini animasyonlamak icin animate.enter ve animate.leave saglar. Bu iki ozellik, uygun zamanlarda giris ve cikis CSS siniflarini uygular veya ucuncu parti kutuphanelerden animasyonlar uygulamak icin fonksiyonlari cagrir. animate.enter ve animate.leave yonerge degildir. Bunlar dogrudan Angular derleyicisi tarafindan desteklenen ozel API'lerdir. Elemanlarda dogrudan kullanilabilir ve ayrica bir ana baglama olarak da kullanilabilir.
DOM'a giren elemanlari animasyonlamak icin animate.enter kullanabilirsiniz. Giris animasyonlarini gecisler veya anahtar kare animasyonlari ile CSS siniflari kullanarak tanimlayabilirsiniz.
enter.ts
import {Component, signal} from '@angular/core';@Component({ selector: 'app-enter', templateUrl: 'enter.html', styleUrls: ['enter.css'],})export class Enter { isShown =signal(false); toggle() { this.isShown.update((isShown) => !isShown); }}
Animasyon tamamlandiginda, Angular animate.enter'da belirttiginiz sinif veya siniflari DOM'dan kaldirir. Animasyon siniflari yalnizca animasyon aktifken mevcuttur.
NOTE: Bir elemanda birden fazla anahtar kare animasyonu veya gecis ozelligi kullanildiginda, Angular tum siniflari yalnizca en uzun animasyon tamamlandiktan sonra kaldirir.
animate.enter'i kontrol akisi veya dinamik ifadeler gibi diger Angular ozellikleriyle kullanabilirsiniz. animate.enter hem tek bir sinif dizesini (boslukla ayrilmis birden fazla sinif ile) hem de bir sinif dizesi dizisini kabul eder.
CSS gecisleri kullanimi hakkinda kisa bir not: Anahtar kare animasyonlari yerine gecisleri kullanmayi secerseniz, animate.enter ile elemana eklenen siniflar gecisin hedef durumunu temsil eder. Temel eleman CSS'iniz, animasyon calismadigi zaman elemanin nasil gorunecegini belirler, bu da muhtemelen CSS gecisinin son durumuna benzer. Bu nedenle, gecisinizin calismasi icin uygun bir baslangic durumuna sahip olmak icin yine de @starting-style ile eslestirmeniz gerekir.
DOM'dan ayrilan elemanlari animasyonlamak icin animate.leave kullanabilirsiniz. Cikis animasyonlarini donusumler veya anahtar kare animasyonlari ile CSS siniflari kullanarak tanimlayabilirsiniz.
Animasyon tamamlandiginda, Angular animasyonlu elemani DOM'dan otomatik olarak kaldirir.
NOTE: Bir elemanda birden fazla anahtar kare animasyonu veya gecis ozelligi kullanildiginda, Angular elemani yalnizca bu animasyonlarin en uzunu tamamlandiktan sonra kaldirir.
animate.leave sinyallerle ve diger baglamalarla da kullanilabilir. animate.leave'i tek bir sinif veya birden fazla sinif ile kullanabilirsiniz. Bosluklu basit bir dize veya bir dize dizisi olarak belirtin.
animate.leave animasyonlarinin nasil calistirildiginda ve bir animasyonun ne zaman gercekleseceginde bazi incelikler vardir. animate.leave, kaldirilan elemanin uzerine yerlestirilmisse calisir ve animate.leave kaldirilan elemanin bir alt ogesi olan bir elemana yerlestirilmisse, bu alt eleman animasyonlari ust dugum DOM'dan kaldirilmadan once gerceklesir. Bu, ust dugum erkenden kaybolmadan alt elemanlari guvenle animasyonla kaldirabilmenizi saglar.
<h2><code>animate.leave</code> Parent Sub-tree Animation Example</h2><button type="button" class="toggle-btn" (click)="toggle()">Toggle Element</button>@if (isShown()) { <div class="leave-parent"> <!-- the child node with `animate.leave` will animate first before the parent node is removed from the DOM. --> <div class="leave-container" animate.leave="leaving"> <p>Goodbye</p> </div> </div>}
Hem animate.enter hem de animate.leave, fonksiyon cagrilarina izin veren olay baglama sozdizimini destekler. Bu sozdizimini bilesen kodunuzdaki bir fonksiyonu cagirmak veya GSAP, anime.js veya herhangi bir JavaScript animasyon kutuphanesi gibi ucuncu parti animasyon kutuphanelerini kullanmak icin kullanabilirsiniz.
leave-event.ts
import {AnimationCallbackEvent, Component, signal} from '@angular/core';@Component({ selector: 'app-leave-binding', templateUrl: 'leave-event.html', styleUrls: ['leave-event.css'],})export class LeaveEvent { isShown =signal(false); toggle() { this.isShown.update((isShown) => !isShown); } leavingFn(event:AnimationCallbackEvent) { // Example of calling GSAP // gsap.to(event.target, { // duration: 1, // x: 100, // // arrow functions are handy for concise callbacks // onComplete: () => event.animationComplete() // }); event.animationComplete(); }}
$event nesnesi AnimationCallbackEvent tipindedir. Elemani target olarak icerir ve animasyon bittiginde cercevye bildirimde bulunmak icin bir animationComplete() fonksiyonu saglar.
IMPORTANT:animate.leave kullanirken Angular'in elemani kaldirmasi icin animationComplete() fonksiyonunu mutlaka cagirmaniz gerekir.
animate.leave kullanirken animationComplete() cagirmazsaniz, Angular dort saniyelik bir gecikmeden sonra fonksiyonu otomatik olarak cagrir. MAX_ANIMATION_TIMEOUT tokenini milisaniye cinsinden saglayarak gecikme suresini yapilandirabilirsiniz.
Eski animasyonlari animate.enter ve animate.leave ile ayni bilesen icinde kullanamazsiniz. Bunu yapmak, giris siniflarinin eleman uzerinde kalmasina veya ayrilan dugumlerin kaldirilmamasina yol acar. Ayni uygulama icinde hem eski animasyonlari hem de yeni animate.enter ve animate.leave animasyonlarini kullanmak ise sorun degildir. Tek istisna icerik projeksiyonudur. Eski animasyonlari olan bir bilesenden animate.enter veya animate.leave olan baska bir bilesene icerik projeksiyonu yapiyorsaniz veya tam tersi, bu ayni bilesende birlikte kullaniliyormus gibi ayni davranisa yol acar. Bu desteklenmemektedir.
TestBed, test ortaminizda animasyonlari etkinlestirmek veya devre disi birakmak icin yerlesik destek saglar. CSS animasyonlari calismak icin bir tarayici gerektirir ve API'lerin cogu test ortaminda mevcut degildir. Varsayilan olarak TestBed, test ortamlarinizdaki animasyonlari sizin icin devre disi birakir.
Animasyonlarin bir tarayici testinde, ornegin uctan uca bir testte animasyonlandigini test etmek istiyorsaniz, test yapilandirmanizda animationsEnabled: true belirterek TestBed'i animasyonlari etkinlestirecek sekilde yapilandirabilirsiniz.