Felhasználói eszközök

Eszközök a webhelyen


oktatas:web:angular:angular_animacio

Ez a dokumentum egy előző változata!


< Angular

Angular - Animáció

Animációkról

src/app/app.config.ts
import { provideAnimationsAsync } from '@angular/platform-browser/animations/async';
 
 
 
//...
 
export const appConfig: ApplicationConfig = {
  providers: [
    //...
    provideAnimationsAsync()   // <--
  ]
};

Függvények importálása

Abban a komponensben ahol az animációt szeretnénk használni:

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

Az animáció helye

@Component({
  selector: 'app-root',
  templateUrl: 'app.component.html',
  styleUrls: ['app.component.css'],
  animations: [
    // animációs utasítások
  ]
})

Átmenet animálása

Készítsünk egy trigger-t, egyelőre üresen:

  animations: [
    trigger('result', [
      state('', style({})),
      state('', style({})),
      transition('', []),
      transition('', [])
    ])
  ]

Egyszerű példa

<p [@triangle]="doboz">triangle works!</p>
 
<button (click)="mehet()">
  Mehet
</button>
import { Component } from '@angular/core';
// import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { 
  animate, 
  state, 
  style, 
  transition, 
  trigger 
} from '@angular/animations';
 
@Component({
  selector: 'app-triangle',
  standalone: true,
  imports: [],
  animations: [
    trigger('triangle', [
      state('egy', style({
        backgroundColor: 'red',
      })),
      state('ketto', style({
        backgroundColor: 'green',
      })),
      transition('egy => ketto', [
        animate('4s')
      ])
    ])    
  ],
 
  templateUrl: './triangle.component.html',
  styleUrl: './triangle.component.css'
})
export class TriangleComponent {
 
  doboz = 'egy';
 
 
  mehet() {
    this.doboz = 'ketto';  
  }
}

Háromszög terület számítás eredménye

Szeretnénk az eredményt animáltan megjeleníteni.

src/app/triangle/triangle.component.ts
import { Component } from '@angular/core';
import { 
  animate, 
  state, 
  style, 
  transition, 
  trigger 
} from '@angular/animations';
import { FormBuilder, ReactiveFormsModule } from '@angular/forms';
 
@Component({
  selector: 'app-triangle',
  standalone: true,
  imports: [ReactiveFormsModule],
  animations: [
    trigger('result', [
      state('disable', style({
        backgroundColor: 'white',
      })),
      state('enable', style({
        backgroundColor: 'blue',
      })),
      transition('disable => enable', [
        animate('4s')
      ]),
      transition('enable => disable', [
        animate('4s')
      ])
    ])    
  ],
 
  templateUrl: './triangle.component.html',
  styleUrl: './triangle.component.css'
})
export class TriangleComponent {
 
  constructor(private builder: FormBuilder) {}
 
  triangleForm = this.builder.group({
    base: '',
    height: '',
    area: ''
  })
 
  isVisible = false;  
 
  onCalcButtonClick() {
    this.isVisible = true;
    let area = this.calcTriangleArea(
      Number(this.triangleForm.value.base),
      Number(this.triangleForm.value.height)
    );
    this.triangleForm.patchValue({area: String(area)});
  }
  onDeleteButtonClick() {
    this.isVisible = false;
    this.triangleForm.reset();
  }
  calcTriangleArea(base: number, height: number) {
    return base * height / 2;
  }
}
src/app/triangle/triangle.component.html
<form class="triangleForm" [formGroup]="triangleForm">
  <div class="mt-3">
      <label for="base" 
      class="form-label">Alap</label>
      <input type="text" formControlName="base"
      id="base" class="form-control">
  </div>
  <div class="mt-3">
      <label for="height" 
      class="form-label">Magasság</label>
      <input type="text" formControlName="height"
      id="height" class="form-control">
  </div>
 
  <div class="mt-3">
      <button class="btn btn-primary me-2" (click)="onCalcButtonClick()">Számít</button>
      <button class="btn btn-primary" (click)="onDeleteButtonClick()">Töröl</button>
  </div>
 
  <div class="mt-3 p-1" [@result]="isVisible ? 'enable' : 'disable'">
      <label for="area" 
      class="form-label">Terület</label>
      <input type="text" formControlName="area"
      id="area" class="form-control">
  </div>
</form>

A teljes projekt a GitHubon:

oktatas/web/angular/angular_animacio.1752703667.txt.gz · Utolsó módosítás: 2025/07/17 00:07 szerkesztette: admin