我想用Angular2动画显示和隐藏我的模态组件。目前这是我的代码:
animations: [
trigger('modalState', [
state('true', style({
display: 'block',
opacity: '1'
})),
state('false', style({
display: 'none',
opacity: '0'
})),
transition('* => *', animate('200ms ease'))
])
]
问题:此时显示块在200ms后设置。因此,您无法看到动画不透明度。应在事件发生后直接设置显示。
怎么做?
答案 0 :(得分:1)
您可以为同一元素使用2个不同的触发器。
第一个将处理'不透明度',第二个将处理'display'属性。 因此,请使用持续时间和延迟时间来获得所需内容。
animations: [
trigger('modalStateOpacity', [
state('true', style({ opacity: '1' })),
state('false', style({ opacity: '0' })),
transition('0 <=> 1', animate('200ms ease'))
]),
trigger('modalStateDisplay', [
state('true', style({ display: 'block' })),
state('false', style({ display: 'none' })),
transition('0 => 1', animate('0ms ease')),
transition('1 => 0', animate('0ms 200ms ease'))
])
]
答案 1 :(得分:0)
您可以将动画挂钩用于离散的CSS属性,例如display
。因此,您的动画将仅包含不透明度:
animations: [
trigger('modalState', [
state('true', style({
opacity: '1'
})),
state('false', style({
opacity: '0'
})),
transition('* => *', animate('200ms ease'))
])
]
然后在您的模板中,您可以使用动画开始/结束钩子来切换display
:
<div
[@modalState]="isShown"
(@modalState.start)="$event.element.style.display = 'block'"
(@modalState.done)="$event.element.style.display = ($event.toState ? 'block' : 'none)">
...
</div>
假设isShown
是布尔值。
答案 2 :(得分:0)
您就在附近。 您必须将样式设置为显示:“阻止”才能观看动画,至少在从状态false转换为true的开始
trigger('showOrHide', [
state('true', style({ opacity: 1, display: 'block' })),
state('false', style({ opacity: 0, display: 'none' })),
transition('0 <=> 1', [
style({ display: 'block' }),
animate('200ms ease')
]),
]),