transition
Объявляет переход анимации, который воспроизводится при выполнении определённого условия.
Предупреждение об устаревании
API
function transition(
stateChangeExpr:
| string
| ((
fromState: string,
toState: string,
element?: any,
params?: { [key: string]: any } | undefined,
) => boolean),
steps: AnimationMetadata | AnimationMetadata[],
options?: AnimationOptions | null,
): AnimationTransitionMetadata;
string | ((fromState: string, toState: string, element?: any, params?: { [key: string]: any; } | undefined) => boolean)Строка определённого формата или функция, задающая момент выполнения перехода анимации (см. раздел Выражение изменения состояния).
AnimationMetadata | AnimationMetadata[]Один или несколько объектов анимации, содержащих инструкции для анимации.
AnimationOptions | nullОбъект параметров, который можно использовать, чтобы задать задержку анимации или передать для неё пользовательские параметры.
Примечания по использованию
Выражение изменения состояния
Выражение изменения состояния указывает Angular, когда запускать анимации перехода. Оно может быть
- строкой с определённым синтаксисом
- или функцией, которая сравнивает предыдущее и текущее состояние (значение выражения, привязанного к триггеру элемента) и возвращает
true, если переход должен произойти, илиfalseв противном случае
Строка может иметь следующий формат:
-
fromState => toState, что означает, что анимации перехода должны выполняться, когда выражение, привязанное к триггеру элемента, меняется сfromStateнаtoStateПример:
transition('open => closed', animate('.5s ease-out', style({ height: 0 }) )) -
fromState <=> toState, что означает, что анимации перехода должны выполняться, когда выражение, привязанное к триггеру элемента, меняется сfromStateнаtoStateили наоборотПример:
transition('enabled <=> disabled', animate('1s cubic-bezier(0.8,0.3,0,1)')) -
:enter/:leave, что означает, что анимации перехода должны выполняться при добавлении элемента в DOM или его удалении из DOMПример:
transition(':enter', [ style({ opacity: 0 }), animate('500ms', style({ opacity: 1 })) ]) -
:increment/:decrement, что означает, что анимации перехода должны выполняться при увеличении или уменьшении числового значения выражения, привязанного к триггеру элементаПример:
transition(':increment', query('@counter', animateChild())) -
последовательностью любых из перечисленных выше выражений, разделённых запятыми; анимации перехода будут выполняться при совпадении любого из выражений изменения состояния
Пример:
transition(':increment, * => enabled, :enter', animate('1s ease', keyframes([ style({ transform: 'scale(1)', offset: 0}), style({ transform: 'scale(1.1)', offset: 0.7}), style({ transform: 'scale(1)', offset: 1}) ]))),
Также обратите внимание на следующее:
-
voidможно использовать, чтобы обозначить отсутствие элемента - звёздочки можно использовать как подстановочные знаки, соответствующие любому состоянию
- (следовательно,
void => *эквивалентно:enter, а* => voidэквивалентно:leave) -
trueиfalseтакже соответствуют значениям выражения1и0соответственно (но не соответствуют значениям истина и ложь)
Будьте осторожны с элементами, которые добавляются в DOM и удаляются из него: их переходы часто становятся источником проблем для разработчиков.
Обратите внимание: когда элемент с триггером добавляется в DOM, его переход :enter всегда выполняется, но переход :leave не будет выполнен, если элемент удаляется вместе с родительским элементом (в этом случае он будет удалён «без предупреждения» до того, как его переход успеет выполниться; такой переход может произойти, только если элемент самостоятельно удаляется из DOM).
Анимация до конечного состояния
Если последний шаг перехода — вызов animate(), в котором указано значение времени без данных style, этот шаг автоматически считается последним этапом анимации, который приводит элемент в конечное состояние. В этом случае Angular автоматически добавляет или удаляет CSS-стили, чтобы обеспечить элементу правильное конечное состояние.
Примеры использования
- Анимации перехода, применяемые в зависимости от значения выражения триггера
<div [@myAnimationTrigger]="myStatusExp"> ... </div>
trigger("myAnimationTrigger", [
..., // states
transition("on => off, open => closed", animate(500)),
transition("* <=> error", query('.indicator', animateChild()))
]) - Анимации перехода, применяемые на основе пользовательской логики, зависящей от значения выражения триггера и переданных параметров
<div [@myAnimationTrigger]="{ value: stepName, params: { target: currentTarget } }"> ... </div>trigger("myAnimationTrigger", [ ..., // states transition( (fromState, toState, _element, params) => ['firststep', 'laststep'].includes(fromState.toLowerCase()) && toState === params?.['target'], animate('1s') ) ])
Super-powered by Google ©2010–2025.
Code licensed under an MIT-style License. Documentation licensed under CC BY 4.0.
https://angular.dev/api/animations/transition