Угловая анимация оставляет переход на дочернем div

Enter анимация работает нормально, но анимация выхода не работает. если я перемещу @modalFadeZoom к родительскому элементу, оба перехода будут работать, но проблема в том, что масштабирование не происходит из центра модальной зоны, что дает странную анимацию.

Если я переместлю @modalFadeZoom к ребенку, то постепенное уменьшение будет работать нормально. но не затухание и увеличение масштаба при закрытии модели.

компонент html

<div class="modal-dialog" *ngIf="showModal">
        <div class="modal-content" [@modalFadeZoom]>
            <div class="modal-header">
                <h5 class="modal-title">SOME TITLE</h5>
                <button type="button" (click)="showModal=false" class="close" aria-label="Close">
          <span aria-hidden="true">×</span>
        </button>
            </div>
            <div class="modal-body">
                lorem ipsum etc etc
            </div>
        </div>
    </div>
    <div class="modal-backdrop fade show" *ngIf="showModal"></div>

TS файл

import { Component, OnInit, trigger, transition, style, animate } from '@angular/core';

    @Component({
        templateUrl: 'modal.template.html',
        animations: [
            trigger(
                'modalFadeZoom',
                [
                    transition(
                        ':enter', [
                            style({ transform: 'scale(.7)', opacity: 0 }),
                            animate('0.3s', style({ opacity: 1, transform: 'scale(1)' })),
                        ]
                    ),
                    transition(
                        ':leave', [
                            style({ opacity: 1, transform: 'scale(1)' }),
                            animate('5.3s', style({ opacity: 0, transform: 'scale(.7)' })),
                        ]
                    ),
                ])
        ]
    })

    export class ModalComponent implements OnInit {

        private showModal = false;;

        ngOnInit(): void {
            this.showModal = true;
        }
    }

CSS для модального диалога

.modal-dialog {
    position: fixed;
    top: 50%;
    left: 50%;
    height: auto;
    z-index: 2000;
    transform: translateX(-50%) translateY(-50%);
}

ссылка plnkr

обратите внимание, что я переместил анимацию в parent в демонстрационной анимации plnkr, которая начинается с центра, из-за масштабирования.

https://plnkr.co/Ldn4wJwuZMaaunVWuYpx

1 ответ

Решение

Измените объявление анимации на это:

trigger(
  'modalFadeZoom',
  [
    transition(
      ':enter', [
        style({ transform: 'translateX(-50%) translateY(-50%) scale(.7)', opacity: 0 }),
        animate('0.3s', style({ opacity: 1, transform: 'translateX(-50%) translateY(-50%) scale(1)' })),
      ]
    ),
    transition(
      ':leave', [
        style({ opacity: 1, transform: 'translateX(-50%) translateY(-50%) scale(1)' }),
        animate('5.3s', style({ opacity: 0, transform: 'translateX(-50%) translateY(-50%) scale(.7)' })),
      ]
    ),
  ])

И переместить анимацию на самый внешний элемент (model-dialog).

Angular не проигрывает анимации, когда они остаются детьми внутри *ngIf.

Другие вопросы по тегам