2017-06-18 2 views
0

J'essaye de faire une simple animation de fondu lors du changement de route, mais cela ne fonctionne pas.Angular 4 Routing Change Animation

Mon fichier d'animation, il est comme ça:

export class RouterAnimations { 
    static animate() { 
     return trigger('routerTransition', [ 
      state('void', style({ opacity: 0 })), 
      state('*', style({ opacity: 1 })), 
      transition(':enter', [ 
       style({ opacity: 0 }), 
       animate('0.4s ease') 
      ]), 
      transition(':leave', [ 
       style({ opacity: 1 }), 
       animate('0.4s ease') 
      ]) 
     ]); 
    }; 
}; 

Mon élément est comme ça:

@Component({ 
    selector: 'app-home', 
    templateUrl: './home.component.html', 
    styleUrls: ['../vitrine.component.css', './home.component.css'], 
    animations: [RouterAnimations.animate()] 
}) 
export class HomeComponent implements OnInit { 
    @HostBinding('@routerTransition') 
    public routerTransition = true; 

    constructor() { } 

    ngOnInit() { 
    } 
} 

J'observé que si je mets un position: fixed sur les états, cela fonctionne, mais lorsque l'animation est terminée la vue est fixe et la disposition est brisée dans l'application.

Répondre

1

Ajouter position: 'relative' sur state('*',style({position: 'relative', opacity: 0 }))

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

export function fade() { 
    return trigger('routerTransition', [ 
     state('void', style({position: 'fixed', opacity: 0 })), 
     state('*', style({position: 'relative', opacity: 0 })), 
     transition(':enter', [ style({opacity: 0}), animate('0.4s ease', style({opacity: 1})) ]), 
     transition(':leave', [ style({opacity: 1}), animate('0.4s ease', style({opacity: 0})) ]) 
    ]); 
} 

dans votre composant

@Component({ 
    selector: 'app-home', 
    templateUrl: './home.component.html', 
    styleUrls: ['../vitrine.component.css', './home.component.css'], 
    animations: [fade()] 
}) 
export class HomeComponent { 

    @HostBinding('@routerTransition') routerTransition; 
    // ... 

} 
+0

Il ne fonctionne pas. J'ai changé l'opacité dans les états et cela a fonctionné, mais l'animation se termine soudainement sans attendre le temps configuré. – tiagor87

+0

Essayez de déplacer le contenu de votre maison vers un composant enfant et laissez HomeComponent gérer uniquement l'animation –

+0

Même problème, l'animation s'arrête soudainement. – tiagor87