Повернуть анимацию в перемещающемся элементе - PullRequest
0 голосов
/ 06 мая 2020

Я создаю приложение Angular со сворачиваемым меню. Кнопка, переключающая меню, должна вращаться всякий раз, когда меню раскрывается или сворачивается, поэтому на элементе изменения размера есть вращающаяся кнопка (изменение ширины / изменение поля). Вращение работает, когда размер не изменяется, но как только изменяется размер родительского элемента, анимация вращения не отображается. Вот минимальный пример, показывающий мою проблему:

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

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html'
  animations: [
    trigger('translate', [
      state('moveRight', style({ marginLeft: '200px' })),
      state('moveLeft', style({ marginLeft: '0px' })),
      transition('moveRight => moveLeft', [ animate('0.5s') ]),
      transition('moveLeft => moveRight', [ animate('0.5s') ])      
    ]),    
    trigger('rotate', [
      state('turnRight', style({ transform: 'rotate(0deg)' })),
      state('turnLeft', style({ transform: 'rotate(180deg)' })),
      transition('turnRight => turnLeft', [ animate('0.5s') ]),
      transition('turnLeft => turnRight', [ animate('0.5s') ])      
    ])
  ]
})

export class AppComponent  {
  isToggled = true;

  toggle() {
    this.isToggled = !this.isToggled;
  }
}

А это мой шаблон:

<div [@translate]="isToggled ? 'moveRight' : 'moveLeft'">
    <div [@rotate]="isToggled ? 'turnRight' : 'turnLeft'" (click)="toggle()" style="width:100px;height:100px;">
        Hello World!
    </div>
</div>

Когда я удаляю @translate -анимацию из внешнего div, поворот выполняется анимация, в противном случае я вижу только движущуюся анимацию. Бывает как в Chrome, так и в Firefox, я бегаю Angular 8.

1 Ответ

2 голосов
/ 06 мая 2020

Одним из решений может быть объединение двух анимаций.

    trigger('translate', [
      /*
      state('moveRight', style({ transform: 'translateX(200px)' })),
      state('moveLeft', style({ transform: 'translateX(0)' })),
      transition('moveRight => moveLeft', [ animate('0.5s') ]),
      transition('moveLeft => moveRight', [ animate('0.5s') ]),
       */
    ]),    
    trigger('rotate', [
      state('turnRight', style({ transform: 'rotate(0deg) translateX(200px)' })),
      state('turnLeft', style({ transform: 'rotate(180deg) translateX(0)' })),
      transition('turnRight => turnLeft', [ animate('0.5s') ]),
      transition('turnLeft => turnRight', [ animate('0.5s') ])
    ])
  ]

Вот рабочий пример: https://stackblitz.com/edit/angular-translate-rotate-animation?file=src / app / app.component.ts

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...