Angular2 Animation - Animate不透明度,但不是display-attribute

时间:2017-02-08 23:27:27

标签: angular angular2-animation

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

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

问题:此时显示块在200ms后设置。因此,您无法看到动画不透明度。应在事件发生后直接设置显示。

怎么做?

3 个答案:

答案 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')
   ]),
]),