/** * @license * Copyright Google Inc. All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ import {animate, keyframes, state, style, transition, trigger} from '@angular/animations'; import {Component} from '@angular/core'; @Component({ host: { '[@backgroundAnimation]': 'bgStatus', '(@backgroundAnimation.start)': 'bgStatusChanged($event, "started")', '(@backgroundAnimation.done)': 'bgStatusChanged($event, "completed")' }, selector: 'animate-app', styleUrls: ['../css/animate-app.css'], template: ` |
{{ item }} - {{ i }}
`, animations: [ trigger('backgroundAnimation', [ state('focus', style({ 'background-color':'white' })), state('blur', style({ 'background-color':'grey' })), transition('* => *', [ animate(500) ]) ]), trigger('boxAnimation', [ state('*', style({ 'height': '*', 'background-color': '#dddddd', 'color':'black' })), state('void, hidden', style({ 'height': 0, 'opacity': 0 })), state('start', style({ 'background-color': 'red', 'height': '*' })), state('active', style({ 'background-color': 'orange', 'color': 'white', 'font-size':'100px' })), transition('active <=> start', [ animate(500, style({ 'transform': 'scale(2)' })), animate(500) ]), transition('* => *', [ animate(1000, style({ 'opacity': 1, 'height': 300 })), animate(1000, style({ 'background-color': 'blue' })), animate(1000, keyframes([ style({ 'background-color': 'blue', 'color': 'black', 'offset': 0.2 }), style({ 'background-color': 'brown', 'color': 'black', 'offset': 0.5 }), style({ 'background-color': 'black', 'color': 'white', 'offset': 1 }) ])), animate(2000) ]) ]) ] }) export class AnimateApp { public items: number[] = []; private _state: ('start'|'active'|'void'|'default'); public bgStatus = 'focus'; remove(item: number) { const index = this.items.indexOf(item); if (index >= 0) { this.items.splice(index, 1); } } reorderAndRemove() { this.items = this.items.sort((a, b) => Math.random() - 0.5); this.items.splice(Math.floor(Math.random() * this.items.length), 1); this.items.splice(Math.floor(Math.random() * this.items.length), 1); this.items[Math.floor(Math.random() * this.items.length)] = 99; } bgStatusChanged(data: {[key: string]: string}, phase: string) { alert(`backgroundAnimation has ${phase} from ${data['fromState']} to ${data['toState']}`); } get state() { return this._state; } set state(s) { this._state = s; if (s == 'void') { this.items = []; } else { this.items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]; } } }