Определите два идентичных open
состояния, называемых 'open'
и 'open-instant'
. Дайте им то же самое точное состояние.
Чтобы предотвратить анимацию, я запускаю состояние open-instant
, которое не имеет определенных переходов. Когда я хочу анимацию, я запускаю состояние open
, которое имеет определенное состояние closed => open
.
trigger('menuAnimation',
[
state('closed', style({
'transform': 'translate(0, -100%)'
})),
state('open', style({
'transform': 'translate(0, 0%)',
})),
state('open-instant', style({
'transform': 'translate(0, 0%)',
})),
// transitions are not triggered for state 'open-instant'
transition('open => closed', [
animate('300ms ease-in-out')
]),
transition('closed => open', [
animate('500ms ease-in-out')
])
]),
Анимация применяется к моему компоненту хоста (это файл menu-bar.component
).
@HostBinding('@menuSlideAnimation') get menuSlideAnimation() {
return (this.showMenu ? 'open' : 'closed') +
(this.disableSlideAnimation ? '-instant' : '');
}
Тогда showMenu
и disableSlideAnimation
являются просто логическими значениями.