/**
* @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: `
Start State
Active State
|
Void State
Scramble!
Unhandled (default) State
Blur Page (Host)
{{ item }} - {{ i }}
x
`,
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];
}
}
}