Genişletilmiş Ekosistem
Eski Animasyonlar

Angular'ın Animasyon paketinden geçiş

@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.

Yerel CSS'de animasyonlar nasıl yazılır

Daha once yerel CSS animasyonlari yazmadiysaniz, baslangic icin bir dizi mukemmel rehber vardir. Bunlardan birkaci: MDN's CSS Animations guide W3Schools CSS3 Animations guide The Complete CSS Animations Tutorial CSS Animation for Beginners

ve birkaç video: Learn CSS Animation in 9 Minutes Net Ninja CSS Animation Tutorial Playlist

Bu cesitli rehber ve egitimlerin bazilarina goz atin, ardindan bu rehbere geri donun.

Yeniden kullanılabilir animasyonlar oluşturma

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 paketiyle

animations.ts

export const sharedAnimation = animation([
  style({
    height: 0,
    opacity: 1,
    backgroundColor: 'red',
  }),
  animate('1s'),
]);

Yerel CSS ile

animations.css

@keyframes sharedAnimation {
  to {
    height: 0;
    opacity: 1;
    background-color: 'red';
  }
}

.animated-class {
  animation: sharedAnimation 1s;
}

animated-class sinifini bir elemana eklemek, o eleman uzerinde animasyonu tetikler.

Bir geçişi animasyonlama

Durum ve stilleri animasyonlama

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:

Animasyon paketiyle

open-close.ts

// ...
      state(
        'open',
        style({
          height: '200px',
          opacity: 1,
          backgroundColor: 'yellow',
        }),
      ),

Ayni davranis, anahtar kare animasyonu veya gecis stili kullanan CSS siniflari ile yerel olarak gerceklestirilebilir.

Yerel CSS ile

animations.css

.open {
  height: '200px';
  opacity: 1;
  background-color: 'yellow';
  transition: all 1s;
}

.closed {
  height: '100px';
  opacity: 0.8;
  background-color: 'blue';
  transition: all 1s;
}

open veya closed durumunu tetiklemek, bileseninizdeki eleman uzerinde siniflari degistirerek yapilir. Bunu nasil yapacaginiza dair ornekleri sablon rehberimizde bulabilirsiniz.

Stilleri dogrudan animasyonlama icin sablon rehberinde benzer ornekler gorebilirsiniz.

Geçişler, zamanlama ve yumuşatma

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.

animations.css

.example-element {
  animation-duration: 1s;
  animation-delay: 500ms;
  animation-timing-function: ease-in-out;
}

.example-shorthand {
  animation: exampleAnimation 1s ease-in-out 500ms;
}

Benzer sekilde, @keyframes kullanmayan animasyonlar icin transition-duration, transition-delay, transition-timing-function ve transition kisayolunu kullanabilirsiniz.

animations.css

.example-element {
  transition-duration: 1s;
  transition-delay: 500ms;
  transition-timing-function: ease-in-out;
  transition-property: margin-right;
}

.example-shorthand {
  transition: margin-right 1s ease-in-out 500ms;
}

Bir animasyonu tetikleme

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 paketiyle

Yerel CSS ile

Geçiş ve tetikleyiciler

Önceden tanımlanmış durum ve joker karakter eşleştirme

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.

Joker karakterlerle otomatik özellik hesaplama

Animasyon paketi, height: auto'ya animasyon yapmak gibi tarihsel olarak animasyonlanmasi zor olan seyleri animasyonlama yetenegini sunuyordu. Artik bunu saf CSS ile de yapabilirsiniz.

Animasyon paketiyle

Otomatik yukseklige animasyon yapmak icin CSS Grid kullanabilirsiniz.

Yerel CSS ile

Tum tarayicilari destekleme konusunda endiselenmeniz gerekmiyorsa, otomatik yukseklige animasyon yapmanin gercek cozumu olan calc-size()'i da inceleyebilirsiniz. Daha fazla bilgi icin MDN belgelerine ve (bu egitime)[https://frontendmasters.com/blog/one-of-the-boss-battles-of-css-is-almost-won-transitioning-to-auto/] bakin.

Görünüme giriş ve çıkış animasyonu

Animasyon paketi, giris ve cikis icin daha once bahsedilen kalip eslemeyi sunuyordu ve ayrica :enter ve :leave kisayol takma adlarini da iceriyordu.

Animasyon paketiyle

Yerel CSS ile

Yerel CSS ile

animate.enter ve animate.leave hakkinda daha fazla bilgi icin Giris ve Cikis animasyonlari rehberine bakin.

Artırma ve azaltma animasyonu

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 paketiyle

Yerel CSS ile

Üst / Alt animasyonlar

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.

Bir animasyonu veya tüm animasyonları devre dışı bırakma

Yerel CSS animasyonlariyla, belirttiginiz animasyonlari devre disi birakmak istiyorsaniz, birden fazla seceeneginiz vardir.

  1. Animasyon ve gecisi none olarak zorlayan ozel bir sinif olusturun.
.no-animation {
  animation: none !important;
  transition: none !important;
}

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.

  1. Daha az animasyon tercih eden kullanicilar icin hicbir animasyonun calmamasini saglamak icin prefers-reduced-motion medya sorgusunu kullanin.

  2. Programatik olarak animasyon siniflari eklemeyi engelleyin

Animasyon geri çağırmaları

Animasyon paketi, animasyon bittiginde bir seyler yapmak istemeniz durumunda kullanmaniz icin geri cagirmalar sunuyordu. Yerel CSS animasyonlarinin da bu geri cagirmalari vardir.

OnAnimationStart OnAnimationEnd OnAnimationIteration OnAnimationCancel

OnTransitionStart OnTransitionRun OnTransitionEnd OnTransitionCancel

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.

Karmaşık diziler

Animasyon paketi karmasik diziler olusturmak icin yerlesik islevsellige sahiptir. Bu dizilerin tumu animasyon paketi olmadan tamamen mumkundur.

Belirli elemanları hedefleme

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()

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 paketiyle

Yerel CSS ile

Paralel animasyonlar

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.

.target-element {
  animation:
    rotate 3s,
    fade-in 2s;
}

Bu ornekte, rotate ve fade-in animasyonlari ayni anda baslar.

Yeniden sıralanan listenin öğelerini animasyonlama

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.

Animasyon paketiyle

Yerel CSS ile

AnimationPlayer kullanımlarını taşıma

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.

Rota geçişleri

Rotalar arasinda animasyon yapmak icin gorünum gecislerini kullanabilirsiniz. Baslamak icin Rota Gecis Animasyonlari Rehberine bakin.