Angular. Плавный переход по страницам

Запись от 16.07.2017

Основано на реальных событиях.

Дисклеймер: что бы понять, о чем идет речь покликайте по страницам на моём сайте. Если видите анимацию, можно читать дальше. А если нет, значит я блефую :)

Первое: создаем файл с настройками анимации, например, в src/app/shared/animations/routing-animation.ts

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

export const routingAnimation = trigger('routingAnimation', [
	state('*', style({opacity: 1})),

	transition(':enter', [
		style({opacity: 0}),
		animate('300ms 150ms ease-out',
			style({opacity: 1})),
	]),

	transition(':leave', [
		style({
			display: 'block',
			position: 'absolute',
			top: 0,
			left: 0,
			right: 0,
			zIndex: 1000,
		}),
		animate('150ms ease-out',
			style({opacity: 0})),
	]),
]);

Здесь устанавливаем два типа анимаций — на появление страницы и исчезание. Абсолютное позиционирование нужно что бы новая страница не сместила старую, пока та анимируется. И по этой же причине используется задержка в 150мс, что бы страницы анимировались поочередно.

Теперь нужно убедиться, что в модуле подключен модуль для анимаций:

import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
imports: [BrowserAnimationsModule],

И можно вешать анимацию на нужные страницы:
@Component({
	animations: [routingAnimation],
})
export class PageComponent implements OnInit {
	@HostBinding('@routingAnimation') private routing;

И последнее: что бы магия сработала, у анимируемых страниц должен быть указан стиль:
:host {display: block;}

Источник вдохновения: http://jasonwatmore.com/post/2017/04/19/angular-2-4-router-animation-tutorial-example