Hur man skapar animationer i AngularJS med ngAnimate

När det används ordentligt kan animationer göra en webbapplikation rolig att använda. Moderna webbläsare kan animera olika element på en webbsida med bara CSS. Om du använder AngularJS i ett av dina projekt kan du också använda ngAnimate-modulen för att lägga till animering på den i Angular-vägen.

Med ngAnimate-modulen kan du lägga till CSS samt JavaScript-baserade animeringar till dina projekt. De CSS-baserade animationerna innehåller nyckelbilder och övergångar. De JavaScript-baserade animationerna måste registreras med module.animation (). I den här handledningen lär du dig att lägga till CSS-animeringar till inbyggda animationsbevisade AngularJS-direktiv för att göra dina appar mer tilltalande.

Det grundläggande

Det första du behöver göra för att lägga till animeringar är att inkludera vinkel animate.js i ditt projekt. När du är klar kan du inkludera ngAnimate-modulen som ett beroende i din app för att börja animera olika element. 

angular.module ('app', ['ngAnimate']);

Här är en lista över olika animationsmedvetna direktiv och animationshändelser som du kan använda för att animera dem:

  • ng-repeat kan upptäcka stiga på, lämna och flytta evenemang.
  • ng-view, ng-inkluderar, ng-omkopplare och ng-om kan upptäcka stiga på och lämna evenemang.
  • ng-show, ng-hide och ng-klass kan upptäcka Lägg till och ta bort evenemang.
  • ng-meddelande kan också upptäcka stiga på och lämna evenemang.

Du bör komma ihåg att dessa animationshakar inte är aktiverade som standard; De blir bara aktiva när du lägger till ngAnimate-modulen i din app.

Animera ng-om du använder CSS3-övergångar

Ng-if-direktivet i AngularJS används för att lägga till eller ta bort element från DOM baserat på värdet av ett givet uttryck. När uttrycket utvärderas till falsk, Elementet tas bort från DOM. När uttrycket utvärderas till Sann, en klon av elementet återinsätts i DOM. Denna tillsats och borttagning av element är omedelbar. Du kan dock animera de element som tas bort eller återskapas med hjälp av ngAnimate-modulen.

Om elementen läggs till i DOM kan du använda ng-ange och ng-enter-aktiv klasser för att animera dem. Övergångskoden och startanimeringstillståndet läggs till i ng-ange klass. Det slutliga animationstillståndet läggs till i ng-enter-aktiv klass. Här är koden för att visa några röda staplar genom att animera sin höjd.

.red-bar.ng-enter övergång: allt lätthet 0.25s; höjd: 0px;  .red-bar.ng-enter.ng-enter-aktiv höjd: 30px; 

På samma sätt kan du också använda en animering för att dölja staplarna med hjälp av ng-permission och den ng-leave-aktiv klasser. Jag har släppt bort animeringen för att ta bort de röda staplarna så att du tydligt kan se skillnaden mellan animerade och icke-animerade stater.

Animera ng-view med CSS3-övergångar

Direktivet ng-view i AngularJS används som en behållare för att ladda om en del av sidan när användaren växlar mellan olika visningar. 

Precis som tillägg och borttagning av element med ng-om, denna process sker också mycket snabbt. Om du vill animera inmatningen och lämningen av olika element i vyn, kan du använda samma gamla ng-ange, ng-enter-aktiv, ng-permission, och ng-leave-aktiv klasser. 

Förutom dessa fyra klasser finns det också en ng-animera klass. Under animeringens gång läggs denna klass också till alla element som behöver animeras. Du kan använda den för att tillhandahålla alla CSS-regler som måste vara tillämpliga under animeringens gång. Här är ett exempel:

.planet-view.ng-animera transition: all ease 0.4s; position: absolut;  .planet-view.ng-enter top: 200px; opacitet: 0;  .planet-view.ng-leave, .planet-view.ng-enter.ng-enter-aktiv top: 0; opacitet: 1;  .planet-view.ng-leave.ng-leave-active top: -200px; opacitet: 0; 

Som du kan se i ovanstående kod har en övergångstid på 0,4 sekunder applicerats på alla egenskaper. När informationen för en specifik planet går in i vyn börjar den med en opacitet av noll och topp position inställd till 200px. Samtidigt har elementen som håller på att lämna vyn en opacitet av 1. 

Vid övergångens slut når de inmatade elementen toppens uppfattning och blir helt ogenomskinliga. På samma sätt ansluter de lämnande elementen till en position 200px ovanför vyn och bleknar bort. Detta ger oss en fin effekt där informationen verkar blekna in från botten av sidan och blekna ut överst på sidan. 

I följande ng-view demo, försök att klicka på namnet på olika planeter för att se stiga på och lämna animationer i aktion.

Informationen om den jordbundna planets atmosfäriska sammansättning har tagits från denna sida.

Animera ng-repeat Använda Keyframe Animations

Ng-repeat-direktivet i AngularJS används för att skapa en mall en gång per objekt i en given samling. Detta direktiv används när du försöker sortera, filtrera, lägga till eller ta bort objekt från en samling. Det finns tre animationshändelser som kan utlösas med ng-repeat.

  • stiga på: Denna händelse utlöses när du lägger till ett nytt objekt i listan eller ett objekt i listan avslöjas efter att ett filter har tillämpats.
  • lämna: Denna händelse utlöses när du tar bort ett objekt från listan eller ett objekt i listan filtreras ut.
  • flytta: Den här händelsen utlöses när ett intilliggande objekt filtreras bort och det aktuella objektet behöver ombeställas.

I de två sista sektionerna har du använt CSS-övergångar för att animera olika element. I det här avsnittet lär du dig att animera olika element med hjälp av keyframe-animering. Jag kommer att ge koden för både övergången och keyframe-animationen så att du kan se skillnaden mellan de två. 

Här är övergångskoden för att animera objekten:

.task-item.ng-enter, .task-item.ng-leave övergång: alla linjära 0,25s;  .task-item.ng-leave top: 0; opacitet: 1;  .task-item.ng-leave.ng-leave-active top: 200px; opacitet: 0;  .task-item.ng-enter opacitet: 0; topp: -500px;  .task-item.ng-enter.ng-enter-active opacitet: 1; topp: 0px; 

Som du kan se är den här koden mycket lik den övergångskod som vi har använt fram till den här tiden. Starttillstånden definieras i ng-ange och ng-permission. Slutändningarna definieras i ng-enter-aktiv och ng-leave-aktiv

Följande kod återskapar samma effekt med hjälp av keyframe-animeringar.

@keyframes tillagt från opacitet: 0; topp: -500px;  till opacitet: 1; topp: 0px;  @keyframes raderade från top: 0; opacitet: 1;  till topp: 200px; opacitet: 0;  .task-item.ng-enter animering: 0.25s tillagt;  .task-item.ng-leave animation: 0.25s deleted; 

Den här gången använder vi CSS animering egenskap för att lägga till animeringen. Den faktiska animationen definieras med @keyframes. Det ursprungliga och slutliga tillståndet för olika objekt har definierats inom nyckelramarna själva. Observera att vi inte behöver använda ng-enter-aktiv och ng-leave-aktiv klasser längre. En fördel med att använda keyframes är att animationen nu kan bli mycket mer komplicerad än en enkel övergång.

Försök lägga till och ta bort några uppgifter i följande demo för att se animationen i åtgärd.

Använda ngAnimate With ngMessages

Envato Tuts + har också publicerat en handledning om att validera dina formulär med hjälp av ngMessages. I den sista delen av den här handledningen lärde du dig att visa felmeddelanden först efter att en användare faktiskt har berört ett inmatningsfält. Alla felmeddelanden i den handledningen visas och försvinna direkt. 

Om du vill lägga till en subtil animering för att visa eller dölja felmeddelandena kan du göra det enkelt med hjälp av ngAnimate-modulen. Som nämnts i början av denna handledning, ng-meddelande kan upptäcka stiga på och lämna evenemang. Det betyder att du kan använda ng-ange och ng-enter-aktiv klasser för att ange initialt och slutligt tillstånd för felmeddelanden som för närvarande visas för användarna. På samma sätt kan du använda ng-permission och ng-leave-aktiv klasser för att ange initialt och slutligt tillstånd för felmeddelanden som är i färd med att döljas från användarna.

Här är ett exempel på att ändra egenskapen för opacitet för felmeddelanden.

.error-msg.ng-enter övergång: 0,5s linjär alla; opacitet: 0;  .error-msg.ng-enter.ng-enter-aktiv opacitet: 1; 

Jag har lagt till en error-msg klass till alla felmeddelanden, och du kan lägga till egna klasser och uppdatera koden i enlighet med detta. I det här fallet har jag inte tillämpat någon animering av felmeddelanden som har blivit ogiltiga och borde inte längre visas för användare. Det betyder att de kommer att försvinna direkt. Här är den demo som visar hur man använder ngMessages och ngAnimate tillsammans.

Slutsats

Denna handledning lärde dig hur man lägger till animering i dina AngularJS-webprogram med hjälp av ngAnimate-modulen. Du lärde dig också att tillämpa olika animeringar på ett element baserat på utlösande händelse. Det sista avsnittet täckte hur man använder ngAnimate-modulen med andra moduler som ngMessages för att lägga till fina animeringar till felmeddelanden. 

En sak som du måste komma ihåg när du använder animeringar är att du inte får använda dem för mycket. För många animeringar kan distrahera användarna från appens huvudfunktion. Använd bara animeringar när du tror att de faktiskt kan förbättra användarupplevelsen. 

Jag hoppas att du haft denna handledning. Om du har några tips, förslag eller frågor relaterade till ngAnimate-modulen, vänligen kommentera.