﻿
{"id":11154,"date":"2019-06-08T22:33:46","date_gmt":"2019-06-08T22:33:46","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=11154"},"modified":"2019-06-08T22:37:53","modified_gmt":"2019-06-08T22:37:53","slug":"angular-6-7-animasyon-islemleri","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/angular-6-7-animasyon-islemleri\/","title":{"rendered":"Angular 6\/7 &#8211; Animasyon \u0130\u015flemleri"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu i\u00e7eri\u011fimizde, Angular mimarisi e\u015fli\u011finde yap\u0131lm\u0131\u015f bir uygulamay\u0131 g\u00f6rsel olarak s\u00fcsleyebilmemiz i\u00e7in geli\u015ftirilmi\u015f animasyon yap\u0131lanmas\u0131n\u0131 inceleyecek, nesnesel animasyonlarla ve componentler aras\u0131 ge\u00e7i\u015f efektleriyle konumuzu \u00f6rneklendirerek ad\u0131m ad\u0131m derinlemesine irdeleyece\u011fiz.<\/p>\n<h3>Giri\u015f<\/h3>\n<p>\u00d6ncelikle &#8220;animasyon&#8221; kelimesinin fiili boyutunu izah ederek konumuza ba\u015flayal\u0131m. Animasyon; bir nesnenin\/yap\u0131n\u0131n ilk durumdaki halinden son durumdaki haline ge\u00e7i\u015f s\u00fcreci olarak ifade edebiliriz. Bu s\u00fcre\u00e7teki etkile\u015fim insan\u0131n g\u00f6z\u00fcne ho\u015f bir g\u00f6r\u00fcnt\u00fc vermekle birlikte zihninde ilgi \u00e7ekici bir izlenim b\u0131rakmakta ve o anki ilgilenilen olgu her ne ise e\u011flenceli hale getirmektedir.<\/p>\n<p>Animasyonlar, g\u00fcn\u00fcm\u00fcz modern web uygulamalar\u0131n\u0131n ayr\u0131lmaz birer par\u00e7alar\u0131 olmu\u015flard\u0131r. Son kullan\u0131c\u0131n\u0131n yapm\u0131\u015f oldu\u011fu bir etkile\u015fim neticesinde uygulama reaksiyona animasyonlar e\u015fli\u011finde girdi\u011fi taktirde ilgili kullan\u0131c\u0131n\u0131n hem uygulamaya olan sempatisini artt\u0131racakt\u0131r hem de yap\u0131sal olarak uygulaman\u0131n kalitesini ortaya koyacakt\u0131r.<\/p>\n<h3>Ba\u015flarken<\/h3>\n<p>Bu i\u00e7eri\u011fimizde Angular uygulamalar\u0131nda animasyon \u00e7al\u0131\u015fmalar\u0131n\u0131n nas\u0131l yap\u0131ld\u0131\u011f\u0131n\u0131 inceleyece\u011fimizden dolay\u0131 pratik a\u011f\u0131rl\u0131kl\u0131 bir seyir halinde olaca\u011f\u0131z. Dolay\u0131s\u0131yla makaleye e\u015flik edebilmeniz i\u00e7in haz\u0131rbulunu\u015fluluk a\u00e7\u0131s\u0131ndan ilk olarak i\u00e7erisinde a\u015fa\u011f\u0131daki yap\u0131lar\u0131 ve config\u00fcrasyonu bar\u0131nd\u0131ran bo\u015f bir Angular projesi olu\u015fturunuz;<\/p>\n<ul>\n<li>&#8220;Home&#8221;, &#8220;About&#8221; ve &#8220;Contact&#8221; isimlerinde \u00fc\u00e7 adet component olu\u015fturunuz,<\/li>\n<li><em style=\"color:blue\">@angular\/platform-browser\/animations<\/em> k\u00fct\u00fcphanesindeki <em>BrowserAnimationsModule<\/em> mod\u00fcl\u00fcn\u00fc uygulaman\u0131n ana mod\u00fcl\u00fcne import ediniz;\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nimport { BrowserModule } from '@angular\/platform-browser';\r\nimport { NgModule } from '@angular\/core';\r\nimport { AppRoutingModule } from '.\/app-routing.module';\r\nimport { AppComponent } from '.\/app.component';\r\nimport { HomeComponent } from '.\/home\/home.component';\r\nimport { AboutComponent } from '.\/about\/about.component';\r\nimport { ContactComponent } from '.\/contact\/contact.component';\r\nimport { BrowserAnimationsModule } from &quot;@angular\/platform-browser\/animations&quot;;\r\n@NgModule({\r\n  declarations: &#x5B;\r\n    AppComponent,\r\n    HomeComponent,\r\n    AboutComponent,\r\n    ContactComponent\r\n  ],\r\n  imports: &#x5B;\r\n    BrowserModule,\r\n    AppRoutingModule,\r\n    BrowserAnimationsModule\r\n  ],\r\n  providers: &#x5B;],\r\n  bootstrap: &#x5B;AppComponent]\r\n})\r\nexport class AppModule { }\r\n<\/pre>\n<\/li>\n<\/ul>\n<p>Evet&#8230; Art\u0131k haz\u0131r\u0131z&#8230;<\/p>\n<h3>Animasyon Ge\u00e7i\u015f Zamanlamas\u0131<\/h3>\n<p>Yukar\u0131daki sat\u0131rlarda &#8220;Giri\u015f&#8221; paragraf\u0131nda Animasyon fiiliyat\u0131n\u0131n izahatini yapm\u0131\u015f ve &#8220;<em>bir nesnenin\/yap\u0131n\u0131n ilk durumdaki halinden son durumdaki haline ge\u00e7i\u015f s\u00fcreci olarak ifade edebiliriz<\/em>&#8221; \u015feklinde tan\u0131mlam\u0131\u015ft\u0131k.<\/p>\n<p>\u0130\u015fte bu -ilk halden- -son hale- ge\u00e7i\u015f s\u00fcrecinde animasyon ge\u00e7i\u015f zamanlamas\u0131 temel konfig\u00fcrasyonu sa\u011flamaktat\u0131r. Angular animasyon ge\u00e7i\u015fi i\u00e7in a\u015fa\u011f\u0131daki \u00fc\u00e7 farkl\u0131 zamanlama \u00f6zelli\u011fini sunmaktad\u0131r;<\/p>\n<ol>\n<li><strong>Duration(<em>S\u00fcre<\/em>)<\/strong><br \/>\nBu \u00f6zellik, animasyonun -ilk halden- -son hale- kadar gelece\u011fi zaman\u0131 ifade eder. A\u015fa\u011f\u0131daki gibi \u00fc\u00e7 farkl\u0131 yolla tan\u0131mlayabiliriz;<\/p>\n<ul style=\"font-size:13px;\">\n<li>Milisaniye cinsinden s\u00fcreyi temsil eden bir tamsay\u0131 de\u011feri kullanma. \u00d6rne\u011fin; 500<\/li>\n<li>Milisaniye cinsinden s\u00fcreyi temsil etmek i\u00e7in bir dize de\u011feri kullanma. \u00d6rne\u011fin; &#8216;500ms&#8217;<\/li>\n<li>S\u00fcreyi saniye cinsinden g\u00f6stermek i\u00e7in bir dize de\u011feri kullanma. \u00d6rne\u011fin; &#8216;0.5s&#8217;<\/li>\n<\/ul>\n<\/li>\n<li><strong>Delay(<em>Gecikme<\/em>)<\/strong><br \/>\nBu \u00f6zellik, tetiklenen animasyon an\u0131 ile ger\u00e7ek ge\u00e7i\u015fin ba\u015flamas\u0131 aras\u0131ndaki s\u00fcreyi temsil eder. A\u015fa\u011f\u0131daki gibi tan\u0131mlanabilir;<\/p>\n<ul style=\"font-size:13px;\">\n<li>&#8216;0.3s 500ms&#8217; : Bu ifade, animasyon tetiklendi\u011fi andan itibaren 500 milisaniye bekleyece\u011fi ve daha sonra ger\u00e7ek ge\u00e7i\u015fin ba\u015flamas\u0131yla birlikte animasyonun 0.3 saniye s\u00fcrece\u011fi anlam\u0131na gelir.<\/li>\n<li>&#8217;10s 3000ms&#8217; : Animasyon 3000 milisaniye bekleyecek, ard\u0131ndan 10 saniye ge\u00e7i\u015f s\u00fcrecektir.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Easing(<em>Hareket H\u0131z\u0131<\/em>)<\/strong><br \/>\nBu \u00f6zellik ise animasyonun ger\u00e7ekle\u015fmesi esnas\u0131nda nas\u0131l h\u0131zlan\u0131p yava\u015flayaca\u011f\u0131n\u0131 ifade eder.<br \/>\nA\u015fa\u011f\u0131daki gibi tan\u0131mlanabilir;<\/p>\n<ul style=\"font-size:13px;\">\n<li>&#8216;0.3s 500ms ease-in&#8217;<\/li>\n<li>&#8216;0.3s 3000ms ease-out&#8217;<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h3>Temel Animasyon Fonksiyonlar\u0131<\/h3>\n<p>Bir nesneye yahut componentler aras\u0131 ge\u00e7i\u015fe animasyon uygulayabilmek i\u00e7in <em>@angular\/animations<\/em> mod\u00fcl\u00fc alt\u0131ndaki fonksiyonlar\u0131 kullanmaktay\u0131z. \u015eimdi gelin teorik olarak bu fonksiyonlar\u0131 inceleyelim;<\/p>\n<ul>\n<li><strong style=\"color:orange\">trigger<\/strong><br \/>\nUygulama i\u00e7in tasarlanm\u0131\u015f t\u00fcm animasyonlar esas\u0131nda birer etikete sahiptirler. \u00c7al\u0131\u015fma zaman\u0131nda hangi animasyon tetikleniyorsa ilgili animasyona \u00f6zel bir trigger f\u0131rlat\u0131lmakta ve s\u00fcre\u00e7 ba\u015flat\u0131lmaktad\u0131r.<\/p>\n<p><strong style=\"color:blue;font-size:13px;\"><em>\u00d6rnek 1.0;<\/em><\/strong><br \/>\n<strong style=\"font-size:13px;\"><em>&#8220;MesajGoster&#8221; animasyonu ba\u015flat\u0131ld\u0131<\/em><\/strong>\n<\/li>\n<li><strong style=\"color:orange\">state<\/strong><br \/>\nAnimasyonun alaca\u011f\u0131 aksiyonun de\u011ferini kontrol eden fonksiyondur.<br \/>\n<strong style=\"color:blue;font-size:13px;\"><em>\u00d6rnek 1.1;<\/em><\/strong><br \/>\n<strong style=\"font-size:13px;\"><em>State de\u011ferleri &#8220;a\u00e7&#8221;\/&#8221;kapat&#8221;<\/em><\/strong>\n<\/li>\n<li><strong style=\"color:orange\">style<\/strong><br \/>\nstate fonksiyonu sayesinde yakalanan de\u011ferler e\u015fli\u011finde, hangi de\u011ferde hangi stillerin uygulanaca\u011f\u0131n\u0131 vs. yani t\u00fcm transform ayarlar\u0131n\u0131 style fonksiyonu sayesinde belirtmekteyiz.<br \/>\n<strong style=\"color:blue;font-size:13px;\"><em>\u00d6rnek 1.2;<\/em><\/strong><br \/>\n<strong style=\"font-size:13px;\"><em>&#8220;a\u00e7&#8221; isimli state de\u011ferinin style yap\u0131lanmas\u0131 \u015f\u00f6yle;<\/p>\n<ul>\n<li>Arkaplan rengi mavi<\/li>\n<li>Yaz\u0131lar turuncu<\/li>\n<li>Yaz\u0131 boyutlar\u0131 17px vs.<\/li>\n<\/ul>\n<p>&#8220;kapat&#8221; isimli state de\u011ferinin style yap\u0131lanmas\u0131 ise \u015f\u00f6yle;<\/p>\n<ul>\n<li>Arkaplan rengi kahverengi<\/li>\n<li>Yaz\u0131lar gri<\/li>\n<li>Yaz\u0131 boyutlar\u0131 13px vs.<\/li>\n<\/ul>\n<p><\/em><\/strong>\n<\/li>\n<li><strong style=\"color:orange\">transition<\/strong><br \/>\nstate de\u011ferlerine \u00f6zel tan\u0131mlanm\u0131\u015f style&#8217;lar aras\u0131nda ge\u00e7i\u015fi sa\u011flamak i\u00e7in kullan\u0131lan fonksiyondur.<br \/>\n<strong style=\"color:blue;font-size:13px;\"><em>\u00d6rnek 1.3;<\/em><\/strong><br \/>\n<strong style=\"font-size:13px;\"><em>Gelen state de\u011feri &#8220;a\u00e7&#8221; ise; &#8220;kapat => a\u00e7&#8221; de\u011fil ise &#8220;a\u00e7 => kapat&#8221; olacak \u015fekilde ge\u00e7i\u015f yap.<\/em><\/strong>\n<\/li>\n<li><strong style=\"color:orange\">animate<\/strong><br \/>\ntransition fonksiyonuyla yap\u0131lacak olan ge\u00e7i\u015fin belirtilen ge\u00e7i\u015f zamanlamas\u0131 zarf\u0131nda ger\u00e7ekle\u015fmesini sa\u011flayan fonksiyondur. Yani animasyon harekat\u0131n\u0131 ba\u015flatan fonksiyondur.<br \/>\n<strong style=\"color:blue;font-size:13px;\"><em>\u00d6rnek 1.4;<\/em><\/strong><br \/>\n<strong style=\"font-size:13px;\"><em>Animasyonu 1500 milisaniye i\u00e7erisinde ger\u00e7ekle\u015ftir.<\/em><\/strong>\n<\/li>\n<li><strong style=\"color:orange\">query<\/strong><br \/>\nComponentler aras\u0131 ge\u00e7i\u015f animasyonlar\u0131nda componente giri\u015f yahut \u00e7\u0131k\u0131\u015f durumlar\u0131nda beklenen style yap\u0131land\u0131rmas\u0131n\u0131 sa\u011flamak i\u00e7in kullan\u0131lan fonksiyondur. transition fonksiyonu i\u00e7erisinde parametre olarak kullan\u0131l\u0131r.\n<\/li>\n<li><strong style=\"color:orange\">group<\/strong><br \/>\n\u0130\u00e7erisinde birden fazla query olacak olan transition fonksiyonunda bu queryleri group fonksiyonu arac\u0131l\u0131\u011f\u0131yla tek bir dizi \u015feklinde tan\u0131mlay\u0131p, tutabiliriz.\n<\/li>\n<\/ul>\n<h3>Animasyon Olu\u015fturma<\/h3>\n<p>Olu\u015fturulan animasyonlar ilgili componentin &#8220;@Component&#8221; deklarasyonu i\u00e7erisindeki &#8220;animations&#8221; dizisinde trigger fonksiyonlar\u0131 olarak tutulacakt\u0131r. Tabi bunun i\u00e7in \u00f6ncelikle animasyon uygulanacak yap\u0131ya yahut nesneye a\u015fa\u011f\u0131daki gibi bir etiket tan\u0131mlamas\u0131 yapmam\u0131z gerekmektedir.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/06\/Angular-7-Animasyon-\u0130\u015flemleri.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/06\/Angular-7-Animasyon-\u0130\u015flemleri.jpg\" alt=\"Angular 7 - Animasyon \u0130\u015flemleri\" width=\"462\" height=\"29\" class=\"aligncenter size-full wp-image-11195\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/06\/Angular-7-Animasyon-\u0130\u015flemleri.jpg 462w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/06\/Angular-7-Animasyon-\u0130\u015flemleri-300x19.jpg 300w\" sizes=\"auto, (max-width: 462px) 100vw, 462px\" \/><\/a><br \/>\nAnimasyon tetiklendi\u011fi vakit, tan\u0131mlanan bu etiket ad\u0131na uygun trigger devreye girecek ve varsa tan\u0131mlanm\u0131\u015f olan de\u011fi\u015fken de\u011ferini state olarak bizlere iletecektir.<\/p>\n<p>\u015eimdi bunu bir ka\u00e7 \u00f6rnekle inceleyece\u011fiz. \u0130\u00e7eri\u011fimizde pratiksel anlat\u0131m sergileyebilmek i\u00e7in yapaca\u011f\u0131m\u0131z nesnesel animasyon \u00f6rneklendirmeleri \u00f6nceden olu\u015fturdu\u011fumuz(<span style=\"font-size:13px;\">&#8216;ba\u015flarken&#8217; ba\u015fl\u0131\u011f\u0131 alt\u0131nda de\u011finmi\u015ftim<\/span>) &#8220;HomeComponent&#8221; alt\u0131nda ger\u00e7ekle\u015ftirece\u011fiz. Bunun haricinde componentler aras\u0131 animasyonel ge\u00e7i\u015flerde ise \u00f6rneklendirmek maksad\u0131yla mevcutta bulunan t\u00fcm componentleri kullanaca\u011f\u0131z.<\/p>\n<h4 style=\"color:gray\">\u00d6rnek 1<\/h4>\n<p>Bu \u00f6rne\u011fimizde bir div nesnesinin boyutunu animasyonel olarak de\u011fi\u015ftirece\u011fiz.<\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\r\n&lt;button type=&quot;button&quot; class=&quot;btn btn-primary&quot; (click)=&quot;boyutDegistir()&quot;&gt;Boyut De\u011fi\u015ftir&lt;\/button&gt;\r\n&lt;div &#x5B;@boyut]=&quot;boyutDurumu&quot;&gt;&lt;\/div&gt;\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nimport { Component } from '@angular\/core';\r\nimport { trigger, state, style, transition, animate } from &quot;@angular\/animations&quot;;\r\n\r\n@Component({\r\n  templateUrl: '.\/home.component.html',\r\n  animations: &#x5B;\r\n    trigger(&quot;boyut&quot;, &#x5B;\r\n      state(&quot;0&quot;, style({\r\n        backgroundColor: &quot;yellow&quot;,\r\n        width: &quot;100px&quot;,\r\n        height: &quot;100px&quot;\r\n      })),\r\n      state(&quot;1&quot;, style({\r\n        backgroundColor: &quot;green&quot;,\r\n        width: &quot;300px&quot;,\r\n        height: &quot;300px&quot;\r\n      })),\r\n      transition(&quot;0 =&gt; 1&quot;, animate(&quot;500ms&quot;)),\r\n      transition(&quot;1 =&gt; 0&quot;, animate(&quot;500ms&quot;)),\r\n    ])\r\n  ]\r\n})\r\nexport class HomeComponent {\r\n  boyutDurumu = 0;\r\n  boyutDegistir() {\r\n    this.boyutDurumu = this.boyutDurumu === 0 ? 1 : 0;\r\n  }\r\n}\r\n<\/pre>\n<p>Yukar\u0131daki yap\u0131lanmay\u0131 incelerseniz e\u011fer &#8220;@boyut&#8221; etiketine sahip olan div nesnesi &#8220;boyutDurumu&#8221; isimli de\u011fer \u00fczerinden animasyonel bir aksiyon ger\u00e7ekle\u015ftirmektedir. Butona t\u0131kland\u0131\u011f\u0131 vakit &#8220;boyutDegistir&#8221; isimli fonksiyon tetiklenecektir ve i\u00e7erisinde &#8220;boyutDurumu&#8221; isimli de\u011fi\u015fkenin de\u011feri de\u011fi\u015ftirilecektir. \u0130\u015fte bu durumda &#8220;boyutDurumu&#8221; de\u011feri de\u011fi\u015fti\u011finden dolay\u0131 &#8220;@boyut&#8221; etiketine sahip olan trigger devreye girecek ve state de\u011ferine g\u00f6re gerekli transition i\u015flemini &#8220;500ms&#8221; i\u00e7erisinde ger\u00e7ekle\u015ftirecektir.<\/p>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/06\/Angular-7-Animasyon-\u0130\u015flemleri.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/06\/Angular-7-Animasyon-\u0130\u015flemleri.gif\" alt=\"Angular 7 - Animasyon \u0130\u015flemleri\" width=\"300\" height=\"338\" class=\"aligncenter size-full wp-image-11203\" \/><\/a><\/p>\n<h4 style=\"color:gray\">\u00d6rnek 2<\/h4>\n<p>Bu \u00f6rnekte ise bir veri k\u00fcmesine animasyonel bir \u015fekilde veri ekleyip, silece\u011fiz.<\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\r\n&lt;button type=&quot;button&quot; class=&quot;btn btn-primary&quot; (click)=&quot;elemanEkle()&quot;&gt;Eleman Ekle&lt;\/button&gt;&lt;button type=&quot;button&quot;\r\n  class=&quot;btn btn-danger m-1&quot; (click)=&quot;elemanSil()&quot;&gt;Eleman Sil&lt;\/button&gt;\r\n\r\n&lt;ul&gt;\r\n  &lt;li &#x5B;@elemanEkle] *ngFor=&quot;let eleman of elemanListesi&quot;&gt;Eleman {{eleman}}&lt;\/li&gt;\r\n&lt;\/ul&gt;\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nimport { Component } from '@angular\/core';\r\nimport { trigger, state, style, transition, animate } from &quot;@angular\/animations&quot;;\r\n\r\n@Component({\r\n  templateUrl: '.\/home.component.html',\r\n  animations: &#x5B;\r\n    trigger(&quot;elemanEkle&quot;, &#x5B;\r\n      state(&quot;void&quot;, style({\r\n        opacity: 0\r\n      })),\r\n      transition(&quot;void &lt;=&gt; *&quot;, animate(1000))\r\n    ])\r\n  ]\r\n})\r\nexport class HomeComponent {\r\n  elemanListesi: number&#x5B;] = &#x5B;];\r\n  sayac: number = 0;\r\n  elemanEkle() {\r\n    this.elemanListesi.push(++this.sayac);\r\n  }\r\n  elemanSil() {\r\n    this.elemanListesi.length -= 1;\r\n  }\r\n}\r\n<\/pre>\n<p>Yukar\u0131daki yap\u0131lanmada ise &#8220;elemanListesi&#8221; isimli veri kayna\u011f\u0131na veri eklenmekte ve silinmektedir. T\u00fcm bu i\u015flem ger\u00e7ekle\u015ftirilirken &#8220;@elemanEkle&#8221; etiket de\u011ferine sahip li nesnesi, herhangi bir de\u011fi\u015fken ba\u011flant\u0131s\u0131 s\u00f6z konusu olmad\u0131\u011f\u0131ndan dolay\u0131 state de\u011feri void olarak tarif edilmektedir ve &#8220;void <=> *&#8221; komutu e\u015fli\u011finde animasyonu devreye sokmaktad\u0131r. <\/p>\n<p>Burada DOM&#8217;un bir par\u00e7as\u0131 olmayan ve \u00e7al\u0131\u015fma zaman\u0131nda listeye eklenen \u00f6\u011fenin state&#8217;ini void ile kar\u015f\u0131lamaktay\u0131z. Bunun nedeni; e\u011fer ki DOM&#8217;a yerle\u015ftirilmeyen bir \u00f6\u011fe olu\u015fturursan\u0131z veyahut DOM&#8217;da olmayan bir \u00f6\u011feyi kald\u0131r\u0131rsan\u0131z bu durumun state&#8217;i void olarak temsil edilecektir. Dolay\u0131s\u0131yla DOM&#8217;da olmayan bir \u00f6\u011fe eklenirken veya kald\u0131r\u0131l\u0131rken animasyon olu\u015fturmak i\u00e7in kulland\u0131\u011f\u0131m\u0131z state de\u011ferimiz void ile ifade edilir.<\/p>\n<p>Ayriyetten t\u00fcm tetiklenme durumlar\u0131na istinaden, \u00e7ift y\u00f6nl\u00fc bir etkile\u015fimin s\u00f6z konusu oldu\u011fu durumlarda &#8220;<=>&#8221; ifadesini ve bununla birlikte t\u00fcm\u00fcn\u00fc ifade eden &#8220;*&#8221; karakterini kullanmaktay\u0131z.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/06\/Angular-7-Animasyon-\u0130\u015flemleri-1.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/06\/Angular-7-Animasyon-\u0130\u015flemleri-1.gif\" alt=\"Angular 7 - Animasyon \u0130\u015flemleri\" width=\"224\" height=\"214\" class=\"aligncenter size-full wp-image-11210\" \/><\/a><\/p>\n<h4 style=\"color:gray\">\u00d6rnek 3<\/h4>\n<p>Yine benzer \u015fekilde veri k\u00fcmesine farkl\u0131 tonda animasyonel i\u015flem ger\u00e7ekle\u015ftirece\u011fiz.<\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\r\n&lt;button type=&quot;button&quot; class=&quot;btn btn-primary&quot; (click)=&quot;elemanEkle()&quot;&gt;Eleman Ekle&lt;\/button&gt;&lt;button type=&quot;button&quot;\r\n  class=&quot;btn btn-danger m-1&quot; (click)=&quot;elemanSil()&quot;&gt;Eleman Sil&lt;\/button&gt;\r\n\r\n&lt;ul&gt;\r\n  &lt;li &#x5B;@ucarakElemanEkle]=&quot;'ucarakEkle'&quot; *ngFor=&quot;let eleman of elemanListesi&quot;&gt;Eleman {{eleman}}&lt;\/li&gt;\r\n&lt;\/ul&gt;\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nimport { Component } from '@angular\/core';\r\nimport { trigger, state, style, transition, animate } from &quot;@angular\/animations&quot;;\r\n\r\n@Component({\r\n  templateUrl: '.\/home.component.html',\r\n  animations: &#x5B;\r\n    trigger(&quot;ucarakElemanEkle&quot;, &#x5B;\r\n      state(&quot;ucarakEkle&quot;, style({ transform: &quot;translateX(0)&quot; })),\r\n      transition(&quot;:enter&quot;, &#x5B;\r\n        style({ transform: 'translateX(-100%)' }),\r\n        animate(&quot;500ms&quot;)\r\n      ]),\r\n      transition(':leave', &#x5B;\r\n        animate(1000, style({ transform: 'translateX(100%)' }))\r\n      ])\r\n    ])\r\n  ]\r\n})\r\nexport class HomeComponent {\r\n  elemanListesi: number&#x5B;] = &#x5B;];\r\n  sayac: number = 0;\r\n  durum = 0;\r\n  elemanEkle() {\r\n    this.elemanListesi.push(++this.sayac);\r\n  }\r\n  elemanSil() {\r\n    this.elemanListesi.length -= 1;\r\n  }\r\n}\r\n<\/pre>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/06\/Angular-7-Animasyon-\u0130\u015flemleri-2.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/06\/Angular-7-Animasyon-\u0130\u015flemleri-2.gif\" alt=\"Angular 7 - Animasyon \u0130\u015flemleri\" width=\"320\" height=\"400\" class=\"aligncenter size-full wp-image-11214\" \/><\/a><\/p>\n<h4 style=\"color:gray\">\u00d6rnek 4<\/h4>\n<p>Ve son olarak componentler aras\u0131 ge\u00e7i\u015fler i\u00e7in bir animasyon olu\u015ftural\u0131m. Tabi bu i\u015flem di\u011fer \u00f6rneklerdekine nazaran biraz daha u\u011fra\u015f gerektirece\u011finden dolay\u0131 ad\u0131m ad\u0131m ilerleyelim;<\/p>\n<ul>\n<li>\n<strong style=\"font-size:13px;color:green;\">Ad\u0131m 1<\/strong><br \/>\n\u0130lk olarak componente \u00f6zel ge\u00e7i\u015f animasyonu kazand\u0131rabilmek i\u00e7in route yap\u0131lanmas\u0131n\u0131 a\u015fa\u011f\u0131dai gibi in\u015fa etmeliyiz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nconst routes: Routes = &#x5B;\r\n  { path: &quot;&quot;, redirectTo: &quot;\/home&quot;, pathMatch: &quot;full&quot; },\r\n  { path: &quot;home&quot;, component: HomeComponent, data: { animation: &quot;home&quot; } },\r\n  { path: &quot;about&quot;, component: AboutComponent, data: { animation: &quot;about&quot; } },\r\n  { path: &quot;contact&quot;, component: ContactComponent, data: { animation: &quot;contact&quot; } }\r\n];\r\n<\/pre>\n<\/li>\n<li>\n<strong style=\"font-size:13px;color:green;\">Ad\u0131m 2<\/strong><br \/>\nArd\u0131ndan componentler aras\u0131 y\u00f6nlendirme neticesinde ilgili componentin html&#8217;inin bas\u0131ld\u0131\u011f\u0131 yer olan <em>router-outlet<\/em> keyword\u00fcn\u00fcn \u00fczerinde a\u015fa\u011f\u0131daki gibi i\u015flem yap\u0131lmas\u0131 yeterlidir.(<span style=\"font-size:12px;color:blue;\">router-outlet, \u00f6rnek projemizde AppComponent i\u00e7erisinde tan\u0131mlanm\u0131\u015ft\u0131r<\/span>)<\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\r\n.\r\n.\r\n.\r\n&lt;div &#x5B;@routeAnimations]=&quot;o &amp;&amp; o.activatedRouteData &amp;&amp; o.activatedRouteData&#x5B;'animation']&quot;&gt;\r\n  &lt;router-outlet #o=&quot;outlet&quot;&gt;&lt;\/router-outlet&gt;\r\n&lt;\/div&gt;\r\n.\r\n.\r\n.\r\n<\/pre>\n<\/li>\n<li>\n<strong style=\"font-size:13px;color:green;\">Ad\u0131m 3<\/strong><br \/>\nComponent bazl\u0131 animasyonlar\u0131m\u0131z\u0131 tek tek olu\u015fturmal\u0131y\u0131z.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nimport { Component } from '@angular\/core';\r\nimport { transition, group, style, animate, query, trigger } from '@angular\/animations';\r\n\r\n@Component({\r\n  selector: 'app-root',\r\n  templateUrl: '.\/app.component.html',\r\n  styleUrls: &#x5B;'.\/app.component.css'],\r\n  animations: &#x5B;\r\n    trigger('routeAnimations', &#x5B;\r\n      transition('home =&gt; *', &#x5B;\r\n        query(':enter, :leave', style({ position: 'fixed', width: '100%' }), { optional: true }),\r\n        group(&#x5B;\r\n          query(':enter', &#x5B;\r\n            style({ transform: 'translateX(100%)' }),\r\n            animate('0.5s ease-in-out', style({ transform: 'translateX(0%)' }))\r\n          ], { optional: true }),\r\n          query(':leave', &#x5B;\r\n            style({ transform: 'translateX(0%)' }),\r\n            animate('0.5s ease-in-out', style({ transform: 'translateX(-100%)' }))\r\n          ], { optional: true }),\r\n        ])\r\n      ]),\r\n      transition('contact =&gt; *', &#x5B;\r\n        query(':enter, :leave', style({ position: 'fixed', width: '100%' }), { optional: true }),\r\n        group(&#x5B;\r\n          query(':enter', &#x5B;\r\n            style({ transform: 'translateX(-100%)' }),\r\n            animate('0.5s ease-in-out', style({ transform: 'translateX(0%)' }))\r\n          ], { optional: true }),\r\n          query(':leave', &#x5B;\r\n            style({ transform: 'translateX(0%)' }),\r\n            animate('0.5s ease-in-out', style({ transform: 'translateX(100%)' }))\r\n          ], { optional: true }),\r\n        ])\r\n      ]),\r\n      transition('about =&gt; contact', &#x5B;\r\n        query(':enter, :leave', style({ position: 'fixed', width: '100%' }), { optional: true }),\r\n        group(&#x5B;\r\n          query(':enter', &#x5B;\r\n            style({ transform: 'translateX(100%)' }),\r\n            animate('0.5s ease-in-out', style({ transform: 'translateX(0%)' }))\r\n          ], { optional: true }),\r\n          query(':leave', &#x5B;\r\n            style({ transform: 'translateX(0%)' }),\r\n            animate('0.5s ease-in-out', style({ transform: 'translateX(-100%)' }))\r\n          ], { optional: true }),\r\n        ])\r\n      ]),\r\n      transition('about =&gt; home', &#x5B;\r\n        query(':enter, :leave', style({ position: 'fixed', width: '100%' }), { optional: true }),\r\n        group(&#x5B;\r\n          query(':enter', &#x5B;\r\n            style({ transform: 'translateX(-100%)' }),\r\n            animate('0.5s ease-in-out', style({ transform: 'translateX(0%)' }))\r\n          ], { optional: true }),\r\n          query(':leave', &#x5B;\r\n            style({ transform: 'translateX(0%)' }),\r\n            animate('0.5s ease-in-out', style({ transform: 'translateX(100%)' }))\r\n          ], { optional: true }),\r\n        ])\r\n      ]),\r\n    ])\r\n  ]\r\n})\r\nexport class AppComponent { }\r\n<\/pre>\n<p>\u015e\u00f6yle bi yukar\u0131daki t\u00fcm transition tan\u0131malamalar\u0131na g\u00f6z atarsak e\u011fer sayfa tasar\u0131s\u0131na uygun bir \u015fekilde animasyon yap\u0131lanmas\u0131n\u0131n sa\u011fland\u0131\u011f\u0131n\u0131 d\u00fc\u015f\u00fcnebilirsiniz. Nihayetinde &#8220;Home&#8221; | &#8220;About&#8221; | &#8220;Contact&#8221; \u015feklinde bir s\u0131ralama ile routelar\u0131 yerle\u015ftirdi\u011fimizi d\u00fc\u015f\u00fcn\u00fcrsek son kullan\u0131c\u0131n\u0131n yapm\u0131\u015f oldu\u011fu y\u00f6nlendirme isteklerini bu s\u0131ralamaya uygun bir \u015fekilde animasyonel olarak kar\u015f\u0131lamaktay\u0131z.<\/p>\n<p>10. sat\u0131rda; &#8220;home => *&#8221; direktifini belirterek &#8220;home&#8221; routeundan olacak t\u00fcm \u00e7\u0131k\u0131\u015flar\u0131 sola kayacak giri\u015fleri ise sa\u011fa kayacak \u015fekilde, 23. sat\u0131rda; &#8220;contact => *&#8221; ifadesi ile &#8220;contact&#8221; routeundan olacak t\u00fcm \u00e7\u0131k\u0131\u015flar\u0131 sa\u011fa giri\u015fleri ise sola kayacak \u015fekilde ve 36 ile 49. sat\u0131rlarda tan\u0131mlanan &#8220;about => contact&#8221; ve &#8220;about => home&#8221; ifadeleri ilede &#8220;about&#8221; routeuna olan t\u00fcm giri\u015flerin ve \u00e7\u0131k\u0131\u015flar\u0131n y\u00f6n\u00fcne g\u00f6re ya sa\u011fa ya da sola do\u011fru bir ge\u00e7i\u015f olacak \u015fekilde animasyonlar ger\u00e7ekle\u015ftirilmi\u015ftir.\n<\/li>\n<\/ul>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/06\/Angular-7-Animasyon-\u0130\u015flemleri-3.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/06\/Angular-7-Animasyon-\u0130\u015flemleri-3.gif\" alt=\"Angular 7 - Animasyon \u0130\u015flemleri\" width=\"476\" height=\"380\" class=\"aligncenter size-full wp-image-11226\" \/><\/a><\/p>\n<p>Bu sat\u0131rlar\u0131n akabinde art\u0131k Angular uygulamalar\u0131n\u0131zda kaliteli animasyonlar e\u015fli\u011finde kullan\u0131c\u0131lar\u0131n\u0131z\u0131 kar\u015f\u0131layabilir ve onlara daha canl\u0131 hizmet sa\u011flayabilirsiniz.<\/p>\n<p>\u00d6rnek projeyi indirmek i\u00e7in <a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/06\/Angular-7-\u2013-Animasyon-\u0130\u015flemleri.zip\" rel=\"noopener noreferrer\" target=\"_blank\">buraya<\/a> t\u0131klay\u0131n\u0131z.<\/p>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\nSonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar.<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Bu i\u00e7eri\u011fimizde, Angular mimarisi e\u015fli\u011finde yap\u0131lm\u0131\u015f bir uygulamay\u0131 g\u00f6rsel olarak s\u00fcsleyebilmemiz i\u00e7in geli\u015ftirilmi\u015f animasyon yap\u0131lanmas\u0131n\u0131 inceleyecek, nesnesel animasyonlarla ve componentler aras\u0131 ge\u00e7i\u015f efektleriyle konumuzu \u00f6rneklendirerek ad\u0131m ad\u0131m derinlemesine irdeleyece\u011fiz. Giri\u015f \u00d6ncelikle &#8220;animasyon&#8221; kelimesinin&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":10506,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2756],"tags":[2880,2882,2883,2884,2881,2886,2885,2887,2879,2888,1292,2889],"class_list":["post-11154","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-angular-7","tag-angular-6-7","tag-angular-7-animasyon","tag-angular-animasyon-islemleri","tag-angular-animations","tag-animasyon-islemleri","tag-animation-delay","tag-animation-duration","tag-animation-easing","tag-browseranimationsmodule","tag-delay","tag-duration","tag-easing"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/11154","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=11154"}],"version-history":[{"count":69,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/11154\/revisions"}],"predecessor-version":[{"id":11231,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/11154\/revisions\/11231"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/10506"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=11154"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=11154"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=11154"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}