55 lines
1.3 KiB
TypeScript
55 lines
1.3 KiB
TypeScript
import {AnimationPlayer} from '../../core_private';
|
|
import {isPresent} from '../facade/lang';
|
|
|
|
import {DomAnimatePlayer} from './dom_animate_player';
|
|
|
|
export class WebAnimationsPlayer implements AnimationPlayer {
|
|
private _subscriptions: Function[] = [];
|
|
private _finished = false;
|
|
public parentPlayer: AnimationPlayer = null;
|
|
|
|
constructor(private _player: DomAnimatePlayer, public totalTime: number) {
|
|
// this is required to make the player startable at a later time
|
|
this.reset();
|
|
this._player.onfinish = () => this._onFinish();
|
|
}
|
|
|
|
private _onFinish() {
|
|
if (!this._finished) {
|
|
this._finished = true;
|
|
if (!isPresent(this.parentPlayer)) {
|
|
this.destroy();
|
|
}
|
|
this._subscriptions.forEach(fn => fn());
|
|
this._subscriptions = [];
|
|
}
|
|
}
|
|
|
|
onDone(fn: Function): void { this._subscriptions.push(fn); }
|
|
|
|
play(): void { this._player.play(); }
|
|
|
|
pause(): void { this._player.pause(); }
|
|
|
|
finish(): void {
|
|
this._onFinish();
|
|
this._player.finish();
|
|
}
|
|
|
|
reset(): void { this._player.cancel(); }
|
|
|
|
restart(): void {
|
|
this.reset();
|
|
this.play();
|
|
}
|
|
|
|
destroy(): void {
|
|
this.reset();
|
|
this._onFinish();
|
|
}
|
|
|
|
setPosition(p: any /** TODO #9100 */): void { this._player.currentTime = p * this.totalTime; }
|
|
|
|
getPosition(): number { return this._player.currentTime / this.totalTime; }
|
|
}
|