Angular Animations API предоставляет мощный и гибкий способ добавления анимаций в веб-приложения на Angular. Оно интегрировано с Angular и позволяет управлять анимациями на уровне компонентов, маршрутов и динамических изменений DOM. Основные возможности включают определение триггеров, состояний, переходов и временных функций для элементов интерфейса.
Для использования анимаций необходимо импортировать модуль
BrowserAnimationsModule в основной модуль приложения:
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
@NgModule({
imports: [
BrowserAnimationsModule,
// другие модули
],
})
export class AppModule {}
После этого можно использовать функции из пакета
@angular/animations для создания триггеров и эффектов.
Angular Animations строятся на триггерах
(trigger), состояниях
(state) и переходах
(transition).
Триггер связывает элемент DOM с набором анимаций. Пример определения триггера:
import { trigger, state, style, transition, animate } from '@angular/animations';
@Component({
selector: 'app-box',
template: `<div [@openClose]="isOpen ? 'open' : 'closed'"></div>`,
animations: [
trigger('openClose', [
state('open', style({
height: '200px',
opacity: 1,
backgroundColor: 'green'
})),
state('closed', style({
height: '100px',
opacity: 0.5,
backgroundColor: 'red'
})),
transition('open <=> closed', [
animate('0.5s ease-in-out')
])
])
]
})
export class BoxComponent {
isOpen = true;
}
state описывает визуальное состояние элемента.style задаёт CSS-свойства для состояния.transition определяет изменения между состояниями и
временные функции.Функция animate позволяет управлять длительностью
анимации, задержкой и кривой временной функции:
animate('1s 0.2s ease-in-out', style({ opacity: 0 }));
1s — длительность анимации.0.2s — задержка перед началом анимации.ease-in-out — кривая ускорения.style — конечное состояние элемента.:enter и :leaveДля динамического отображения элементов применяются специальные псевдосостояния:
trigger('fadeInOut', [
transition(':enter', [
style({ opacity: 0 }),
animate('500ms ease-in', style({ opacity: 1 }))
]),
transition(':leave', [
animate('500ms ease-out', style({ opacity: 0 }))
])
])
:enter — элемент добавляется в DOM.:leave — элемент удаляется из DOM.Это упрощает анимацию появления и исчезновения компонентов без необходимости создания отдельных состояний.
Angular позволяет выполнять несколько анимаций одновременно с помощью
group или последовательно через sequence.
import { group, sequence } from '@angular/animations';
transition('closed => open', [
group([
animate('1s', style({ height: '200px' })),
animate('0.5s', style({ opacity: 1 }))
])
])
group — параллельное выполнение анимаций.sequence — последовательное выполнение шагов.Angular Animations API интегрируется с маршрутизацией для создания
плавных переходов между страницами. Для этого используется
RouterOutlet с директивой [@triggerName]:
<main [@routeAnimations]="o.isActivated ? o.activatedRoute : ''">
<router-outlet #o="outlet"></router-outlet>
</main>
В компоненте можно определить анимации с состояниями маршрутов и переходами:
trigger('routeAnimations', [
transition('* <=> *', [
style({ opacity: 0 }),
animate('300ms', style({ opacity: 1 }))
])
])
Ключевые кадры позволяют задавать сложные анимации с промежуточными шагами:
import { keyframes } from '@angular/animations';
animate('2s', keyframes([
style({ transform: 'translateX(0)', offset: 0 }),
style({ transform: 'translateX(50px)', offset: 0.5 }),
style({ transform: 'translateX(0)', offset: 1 })
]))
offset — процент времени анимации (от 0 до 1).Анимации могут быть вызваны динамически через
AnimationBuilder и AnimationPlayer, что даёт
возможность создавать эффекты в коде без использования шаблона:
import { AnimationBuilder, style, animate } from '@angular/animations';
constructor(private builder: AnimationBuilder) {}
animateDiv(div: HTMLElement) {
const factory = this.builder.build([
style({ opacity: 0 }),
animate('500ms', style({ opacity: 1 }))
]);
const player = factory.create(div);
player.play();
}
AnimationBuilder создаёт фабрику анимаций.AnimationPlayer управляет воспроизведением (play,
pause, reset).:enter,
:leave) для управления динамическими элементами.group и sequence для сложных
анимаций.RouterOutlet.Angular Animations API сочетает декларативный подход с возможностью детального управления, позволяя создавать плавные и интерактивные интерфейсы без необходимости подключения сторонних библиотек.