Angular is a popular front-end framework made by Google. Like other popular front-end frameworks, it uses a component-based architecture to structure apps.
In this article, we look at how to create animation effects in an Angular app.
Getting Started
To get started, we need to enable the animations module.
We do that by writing the following:
app.module.ts :
import { BrowserModule } from "@angular/platform-browser";
import { NgModule } from "@angular/core";
import { BrowserAnimationsModule } from "@angular/platform-browser/animations";
import { AppComponent } from "./app.component";
@NgModule({
declarations: [AppComponent],
imports: [BrowserModule, BrowserAnimationsModule],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule {}
Then we import the animation functions into our component file as follows:
app.component.ts :
import {
trigger,
state,
style,
animate,
transition,
// ...
} from '@angular/animations';
Finally, we add the animation metadata property to our component as follows:
@Component({
selector: 'app-root',
templateUrl: 'app.component.html',
styleUrls: ['app.component.css'],
animations: [
// animation triggers go here
]
})
Animation State and Styles
We call the state function to define different states to call at the end of each transition.
It takes a name and a style function. It takes an object with the CSS styles with the style attribute names in camelCase.
We then define transitions with the transition function, which takes the state transition string, and an array with the animate function call with the time string for animation.
All of the state and transition calls are wrapped in an array as the 2nd argument of the trigger function.
The first argument of the trigger function is the name of our trigger.
We write an app with all the parts to create a simple transition effect as follows:
app.module.ts :
import { BrowserModule } from "@angular/platform-browser";
import { NgModule } from "@angular/core";
import { BrowserAnimationsModule } from "@angular/platform-browser/animations";
import { AppComponent } from "./app.component";
@NgModule({
declarations: [AppComponent],
imports: [BrowserModule, BrowserAnimationsModule],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule {}
app.component.ts :
import { Component } from "@angular/core";
import {
state,
style,
transition,
animate,
trigger
} from "@angular/animations";
@Component({
selector: "app-root",
templateUrl: "./app.component.html",
styleUrls: ["./app.component.css"],
animations: [
trigger("openClose", [
state(
"open",
style({
height: "250px",
opacity: 1,
backgroundColor: "pink"
})
),
state(
"closed",
style({
height: "100px",
opacity: 0.5,
backgroundColor: "green"
})
),
transition("open => closed", [animate("1s")]),
transition("closed => open", [animate("0.5s")])
])
]
})
export class AppComponent {
isOpen = true;toggle() {
this.isOpen = !this.isOpen;
}
}
app.component.html :
<button (click)="toggle()">Toggle</button>
<div [@openClose]="isOpen ? 'open' : 'closed'">
{{ isOpen ? 'Open' : 'Closed' }}
</div>
In the code above, we imported the BrowserAnimationModule in AppModule .
Then in the animations metadata array of the AppComponent , we add the animation trigger with the trigger function.
We then have the transition states which are generated with the state function.
The state function takes a style function call which returns the styles for each state of the transition.
The style function takes an object with the CSS style for each transition state.
In the component, we have the toggle function toggle the isOpen field when it’s called.
With the transition function calls, we specify the animation intervals with the animate function with the time string passed in.
Finally, in the template, we add the openClose trigger to the div. We display the style for the `open' state when isOpen is true and display the style for the 'closed' state otherwise.
If we have another trigger, we can change the name openClose to the other trigger name.
In the end, when we click the Toggle button, we see a yellow background with a height of 250px and a pink background with a height of 100px. The opacity also changed as specified.
Animations API Summary
The Angular animations API has the following function:
trigger— starts the animation and serves as the container for all animation function calls.style— defines the CSS style for each stage of the animationstate— creates a named set of CSS styles that should be applied on a successful transition to a given stateanimate— specifies the timing information of the animationtransition— defines the animation sequence between 2 named stateskeyframes— allows a sequential change between styles within a specified time intervalgroup— specifies a group of animation steps to be run in parallelquery— use to find one or inner HTML elements within the current elementsequence— specifies a list of animation steps that are sequentiallystagger— staggers the starting time for animation for multiple elementsanimatiom— produces a reuseable animation that can be invoked from elsewhereuseAnimation— activates a reuseable animationanimateChild— allows animations on child components to be run within the same timeframe as the parent
Conclusion
We can create animations with the built-in Angular BrowserAnimationsModule .
To create a simple transition effect, we just have to specify a trigger, then the states of the animation with the styles.
Then we have to specify what to do when we transition to different states.