#html #angular #typescript #angular-template #angular-animations
#HTML #angular #typescript #angular-template #angular-анимации
Вопрос:
это мой шаблон компонента
<nav class="menu" [ngClass]="{ snap: snap }" [@menuBackground]="'normal'">
<div class="container fluid">
<div class="row align-items-center">
<div class="col-2" [@logoZoomOut]="'normal'">
<img *ngIf="true" src="../../../assets/logo.png" class="logo img-fluid" alt="logo" />
</div>
<div
class="links-wrapper text-right d-none d-md-block col-md-8 offset-md-2 col-lg-6 offset-lg-4 col-xl-5 offset-xl-5"
>
<ul>
<app-menu-link [link]="'/'" [text]="'Home'" [first]="true"></app-menu-link>
<app-menu-link [link]="'/services'" [text]="'Services'"></app-menu-link>
<app-menu-link [link]="'/portfolio'" [text]="'Portfolio'"></app-menu-link>
<app-menu-link [link]="'/contact'" [text]="'Contact'" [contact]="true"></app-menu-link>
</ul>
</div>
</div>
</div>
</nav>
И это мой код компонента:
import { Component, OnInit, OnDestroy } from '@angular/core';
import { trigger, state, style, transition, animate } from '@angular/animations';
@Component({
selector: 'app-menu',
templateUrl: './menu.component.html',
styleUrls: ['./menu.component.scss'],
animations: [
trigger('menuBackground', [
state('normal', style({ background: 'rgba(118, 137, 169, 0.22)' })),
transition('void => normal', [style({ background: 'none' }), animate('.5s 2s ease-in')])
]),
trigger('logoZoomOut', [
state('normal', style({ transform: 'scale(1)' })),
transition('void => normal', [style({ transform: 'scale(1.5)' }), animate('.5s ease-in')])
])
]
})
export class MenuComponent implements OnInit, OnDestroy {
public snap = false;
constructor() {}
ngOnInit() {
window.addEventListener('scroll', this.scroll, true);
}
ngOnDestroy() {
window.removeEventListener('scroll', this.scroll, true);
}
scroll = (): void => {
if (window.pageYOffset > 90) {
this.snap = true;
} else {
this.snap = false;
}
};
}
И теперь я хочу анимировать как фон навигации, так и размер логотипа.
Но проблема в том, что когда оба menuBackground
logoZoomOut
триггера и установлены на nav
и div
— анимируется только фон, а анимация логотипа не воспроизводится.
Когда я удаляю фоновую анимацию — логотип анимируется правильно.
Итак, как я могу анимировать оба элемента одновременно? Я думал, что это должно работать независимо. У меня также была проблема с анимацией логотипа — она не работала без *ngIf="true"
img
элемента on. Может быть, это как-то связано?
Ответ №1:
Вы можете добиться запуска внутренней анимации с помощью animateChild. Если вы хотите запустить обе анимации одновременно, вам необходимо дополнительно использовать group .