В Angular анимациях селекторы (state и
transition) позволяют управлять визуальными изменениями
компонентов в зависимости от их состояния.
Состояния описываются с помощью функции state(), где
указывается имя состояния и соответствующие CSS-стили:
state('open', style({
height: '200px',
opacity: 1,
backgroundColor: 'lightblue'
})),
state('closed', style({
height: '0px',
opacity: 0,
backgroundColor: 'lightgray'
}))
Особенности:
[ @triggerName ]="stateName" для динамической
анимации.transition() определяет условия и параметры перехода
между состояниями:
transition('open <=> closed', [
animate('300ms ease-in-out')
])
<=> указывает двунаправленный переход
между состояниями.'open => closed'.Angular поддерживает псевдосостояния через символ
::
:enter — элемент добавляется в DOM.:leave — элемент удаляется из DOM.:increment / :decrement — изменения
числовых значений для детализированных анимаций.Пример использования производного состояния:
trigger('listAnimation', [
transition(':enter', [
style({ opacity: 0, transform: 'translateY(-20px)' }),
animate('500ms ease-out', style({ opacity: 1, transform: 'translateY(0)' }))
]),
transition(':leave', [
animate('300ms ease-in', style({ opacity: 0, transform: 'translateY(20px)' }))
])
])
Ключевые моменты:
Для интерактивных элементов (hover, active)
состояния можно комбинировать с классами CSS и триггерами Angular:
trigger('buttonState', [
state('hovered', style({ transform: 'scale(1.05)' })),
state('default', style({ transform: 'scale(1)' })),
transition('default => hovered', animate('200ms ease-in')),
transition('hovered => default', animate('200ms ease-out'))
])
Это позволяет создавать отзывчивые интерфейсы с минимальным количеством кода и без прямого вмешательства в DOM.