Angular2 动画 - 动画不透明度,但不是显示属性

rak*_*ete 6 angular2-animation angular

我想用 Angular2 动画显示和隐藏我的模态组件。目前这是我的代码:

animations: [
    trigger('modalState', [
      state('true', style({
        display: 'block',
        opacity: '1'
      })),
      state('false',   style({
        display: 'none',
        opacity: '0'
      })),
      transition('* => *', animate('200ms ease'))
    ])
  ]
Run Code Online (Sandbox Code Playgroud)

问题:目前显示块在 200ms 后设置。所以你看不到动画不透明度。显示应在事件后直接设置。

这该怎么做?

小智 6

您可以将动画挂钩用于离散 CSS 属性,例如display. 因此,您的动画将仅包含不透明度:

animations: [
  trigger('modalState', [
    state('true', style({
      opacity: '1'
    })),
    state('false', style({
      opacity: '0'
    })),
    transition('* => *', animate('200ms ease'))
  ])
]
Run Code Online (Sandbox Code Playgroud)

然后在模板中,您可以使用动画开始/结束挂钩来切换display

<div
  [@modalState]="isShown"
  (@modalState.start)="$event.element.style.display = 'block'"
  (@modalState.done)="$event.element.style.display = ($event.toState ? 'block' : 'none')">
  ...
</div>
Run Code Online (Sandbox Code Playgroud)

假设isShown是布尔值。


Ale*_*aul 4

您可以对同一元素使用 2 个不同的触发器。

第一个将处理“不透明度”,第二个将处理“显示”属性。因此,请使用持续时间和延迟时间来获得您需要的内容。

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'))
    ])
  ]
Run Code Online (Sandbox Code Playgroud)