chore(animation): pass instance to onFinish callbacks

This commit is contained in:
Adam Bradley
2016-02-21 13:52:25 -06:00
parent 3c8daa0781
commit b62725c8ce
4 changed files with 43 additions and 11 deletions

View File

@ -23,13 +23,14 @@ export class Animation {
private _fFns: Function[]; private _fFns: Function[];
private _fOnceFns: Function[]; private _fOnceFns: Function[];
private _wChg: boolean = false; private _wChg: boolean = false;
private _rv: boolean; private _rv: boolean = false;
private _unregTrans: Function; private _unregTrans: Function;
private _tmr: number; private _tmr: number;
private _lastUpd: number = 0; private _lastUpd: number = 0;
public isPlaying: boolean; public isPlaying: boolean = false;
public hasTween: boolean; public hasTween: boolean = false;
public hasCompleted: boolean = false;
constructor(ele?: any, opts: AnimationOptions = {}) { constructor(ele?: any, opts: AnimationOptions = {}) {
this._reset(); this._reset();
@ -57,9 +58,6 @@ export class Animation {
this._fOnceFns = []; this._fOnceFns = [];
this._clearAsync(); this._clearAsync();
this.isPlaying = this.hasTween = this._rv = false;
this._easing = this._dur = null;
} }
element(ele: any): Animation { element(ele: any): Animation {
@ -687,13 +685,14 @@ export class Animation {
_onFinish(hasCompleted: boolean) { _onFinish(hasCompleted: boolean) {
this.isPlaying = false; this.isPlaying = false;
this.hasCompleted = hasCompleted;
var i: number; var i: number;
for (i = 0; i < this._fFns.length; i++) { for (i = 0; i < this._fFns.length; i++) {
this._fFns[i](hasCompleted); this._fFns[i](this);
} }
for (i = 0; i < this._fOnceFns.length; i++) { for (i = 0; i < this._fOnceFns.length; i++) {
this._fOnceFns[i](hasCompleted); this._fOnceFns[i](this);
} }
this._fOnceFns = []; this._fOnceFns = [];
} }

View File

@ -22,6 +22,35 @@ class E2EPage {
a.easing(this.easing); a.easing(this.easing);
a.play(); a.play();
} }
memoryCheck() {
let self = this;
let count = 0;
function play() {
count++;
if (count >= 100) {
console.log('Play done');
return;
}
console.log('Play', count);
let a = new Animation('.green');
a.fromTo('translateX', '0px', '200px');
a.duration(self.duration);
a.easing(self.easing);
a.onFinish((animation) => {
setTimeout(() => {
play();
}, 100);
animation.destroy();
});
a.play();
}
play();
}
} }

View File

@ -28,6 +28,10 @@
<button ion-item (click)="playGreen()"> <button ion-item (click)="playGreen()">
Play Play
</button> </button>
<button ion-item (click)="memoryCheck()">
Memory Check
</button>
</ion-list> </ion-list>
</ion-content> </ion-content>

View File

@ -1081,13 +1081,13 @@ export class NavController extends Ion {
} }
// create a callback for when the animation is done // create a callback for when the animation is done
transAnimation.onFinish((hasCompleted: boolean) => { transAnimation.onFinish((trans: Transition) => {
// transition animation has ended // transition animation has ended
// destroy the animation and it's element references // destroy the animation and it's element references
transAnimation.destroy(); trans.destroy();
this._afterTrans(enteringView, leavingView, opts, hasCompleted, done); this._afterTrans(enteringView, leavingView, opts, trans.hasCompleted, done);
}); });
// cool, let's do this, start the transition // cool, let's do this, start the transition