example else ejemplos css angular angular-animations

else - transición/animación angular 2 ngIf y CSS



ngif angular 6 example (6)

De acuerdo con la última angular.io/docs/ts/latest/guide/animations.html , puede animar elementos de "entrada y salida" (como en angular 1).

Ejemplo de animación de desvanecimiento simple:

En el componente @Component relevante, agregue:

animations: [ trigger(''fadeInOut'', [ transition('':enter'', [ // :enter is alias to ''void => *'' style({opacity:0}), animate(500, style({opacity:1})) ]), transition('':leave'', [ // :leave is alias to ''* => void'' animate(500, style({opacity:0})) ]) ]) ]

No olvides agregar importaciones

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

El elemento html del componente relevante debería verse así:

<div *ngIf="toggle" [@fadeInOut]>element</div>

Creé un ejemplo de animación de diapositiva y desvanecimiento here .

Explicación sobre ''void'' y ''*'':

  • void es el estado cuando ngIf se establece en falso (se aplica cuando el elemento no está adjunto a una vista).
  • * - Puede haber muchos estados de animación (lea más en documentos). El estado * tiene prioridad sobre todos ellos como un "comodín" (en mi ejemplo, este es el estado cuando ngIf se establece en true ).

Aviso (tomado de documentos angulares):

import { BrowserAnimationsModule } from ''@angular/platform-browser/animations''; adicional dentro del módulo de la aplicación, import { BrowserAnimationsModule } from ''@angular/platform-browser/animations'';

Las animaciones angulares se crean sobre la API de animaciones web estándar y se ejecutan de forma nativa en los navegadores que lo admiten. Para otros navegadores, se requiere un polyfill. Toma web-animations.min.js de GitHub y agrégalo a tu página.

Quiero que un div se deslice desde la derecha en angular 2 usando css.

<div class="note" [ngClass]="{''transition'':show}" *ngIf="show"> <p> Notes</p> </div> <button class="btn btn-default" (click)="toggle(show)">Toggle</button>

Funciono bien si solo uso [ngClass] para alternar la clase y utilizar opacidad. Pero no quiero que ese elemento se represente desde el principio, así que primero lo "oculto" con ngIf, pero luego la transición no funcionará.

.transition{ -webkit-transition: opacity 1000ms ease-in-out,margin-left 500ms ease-in-out; -moz-transition: opacity 1000ms ease-in-out,margin-left 500ms ease-in-out; -ms-transition: opacity 1000ms ease-in-out,margin-left 500ms ease-in-out ; -o-transition: opacity 1000ms ease-in-out,margin-left 500ms ease-in-out; transition: opacity 1000ms ease-in-out,margin-left 500ms ease-in-out; margin-left: 1500px; width: 200px; opacity: 0; } .transition{ opacity: 100; margin-left: 0; }


Estoy usando angular 5 y para que un ngif funcione para mí que está en un ngfor, tuve que usar animateChild y en el componente de detalle del usuario usé * ngIf = "user.expanded" para mostrar hide user y funcionó para ingresar una partida

<div *ngFor="let user of users" @flyInParent> <ly-user-detail [user]= "user" @flyIn></user-detail> </div> //the animation file export const FLIP_TRANSITION = [ trigger(''flyInParent'', [ transition('':enter, :leave'', [ query(''@*'', animateChild()) ]) ]), trigger(''flyIn'', [ state(''void'', style({width: ''100%'', height: ''100%''})), state(''*'', style({width: ''100%'', height: ''100%''})), transition('':enter'', [ style({ transform: ''translateY(100%)'', position: ''fixed'' }), animate(''0.5s cubic-bezier(0.35, 0, 0.25, 1)'', style({transform: ''translateY(0%)''})) ]), transition('':leave'', [ style({ transform: ''translateY(0%)'', position: ''fixed'' }), animate(''0.5s cubic-bezier(0.35, 0, 0.25, 1)'', style({transform: ''translateY(100%)''})) ]) ]) ];


Solución única de CSS para navegadores modernos

@keyframes slidein { 0% {margin-left:1500px;} 100% {margin-left:0px;} } .note { animation-name: slidein; animation-duration: .9s; display: block; }


Una forma es usar un setter para la propiedad ngIf y establecer el estado como parte de la actualización del valor. Cuando se establece la propiedad en true, se debe llamar a detectChanges () para asegurarse de que el elemento se vuelva a agregar al dom antes de que cambie el estado de la animación.

Ejemplo de StackBlitz

example.component.ts

import { Component, AnimationTransitionEvent, OnInit } from ''@angular/core''; import { trigger, state, style, animate, transition } from ''@angular/animations''; @Component({ selector: ''example'', templateUrl: `./example.component.html`, styleUrls: [`./example.component.css`], animations: [ trigger(''state'', [ state(''visible'', style({ opacity: ''1'' })), state(''hidden'', style({ opacity: ''0'' })), transition(''* => visible'', [ animate(''500ms ease-out'') ]), transition(''visible => hidden'', [ animate(''500ms ease-out'') ]) ]) ] }) export class ExampleComponent implements OnInit { state: string; private _showButton: boolean; get showButton() { return this._showButton; } set showButton(val: boolean) { if (val) { this._showButton = true; this.state = ''visible''; } else { this.state = ''hidden''; } } constructor() { } ngOnInit() { this.showButton = true; } animationDone(event: AnimationTransitionEvent) { if (event.fromState === ''visible'' && event.toState === ''hidden'') { this._showButton = false; } } log() { console.log(''clicked''); } }

ejemplo.componente.html

<div> <p>animation state: {{state}}</p> <p>showButton: {{showButton}}</p> <button (click)="showButton = !showButton">toggle</button> </div> <button class="animation-target" *ngIf="showButton" [@state]="state" (@state.done)="animationDone($event)" (click)="log()" >animation target</button>

ejemplo.componente.css

.animation-target { background: orange; height: 150px; width: 150px; cursor: pointer; opacity: 0; }


actualización 4.1.0

Plunker

Ver también https://github.com/angular/angular/blob/master/CHANGELOG.md#400-rc1-2017-02-24

actualización 2.1.0

Plunker

Para más detalles ver Animaciones en angular.io

import { trigger, style, animate, transition } from ''@angular/animations''; @Component({ selector: ''my-app'', animations: [ trigger( ''enterAnimation'', [ transition('':enter'', [ style({transform: ''translateX(100%)'', opacity: 0}), animate(''500ms'', style({transform: ''translateX(0)'', opacity: 1})) ]), transition('':leave'', [ style({transform: ''translateX(0)'', opacity: 1}), animate(''500ms'', style({transform: ''translateX(100%)'', opacity: 0})) ]) ] ) ], template: ` <button (click)="show = !show">toggle show ({{show}})</button> <div *ngIf="show" [@enterAnimation]>xxx</div> ` }) export class App { show:boolean = false; }

original

*ngIf elimina el elemento del DOM cuando la expresión se vuelve false . No puede tener una transición en un elemento no existente.

Usar en lugar hidden :

<div class="note" [ngClass]="{''transition'':show}" [hidden]="!show">


trigger(''slideIn'', [ state(''*'', style({ ''overflow-y'': ''hidden'' })), state(''void'', style({ ''overflow-y'': ''hidden'' })), transition(''* => void'', [ style({ height: ''*'' }), animate(250, style({ height: 0 })) ]), transition(''void => *'', [ style({ height: ''0'' }), animate(250, style({ height: ''*'' })) ]) ])