src/utils/animation-frame.service.ts
Properties |
|
Methods |
|
constructor(ngZone: NgZone)
|
||||||
Defined in src/utils/animation-frame.service.ts:14
|
||||||
Parameters :
|
Protected doTick | ||||||
doTick(frame: number)
|
||||||
Defined in src/utils/animation-frame.service.ts:27
|
||||||
Parameters :
Returns :
void
|
ngOnDestroy |
ngOnDestroy()
|
Defined in src/utils/animation-frame.service.ts:23
|
Returns :
void
|
Protected animationFrameId |
Type : number
|
Defined in src/utils/animation-frame.service.ts:14
|
Protected frameSource |
Default value : new Subject<number>()
|
Defined in src/utils/animation-frame.service.ts:12
|
Public tick |
Type : Observable<number>
|
Defined in src/utils/animation-frame.service.ts:10
|
import {
Injectable,
OnDestroy,
NgZone
} from "@angular/core";
import { Observable, Subject, from } from "rxjs";
@Injectable()
export class AnimationFrameServiceSingleton implements OnDestroy {
public tick: Observable<number>;
protected frameSource = new Subject<number>();
protected animationFrameId: number;
constructor(protected ngZone: NgZone) {
this.tick = this.frameSource.asObservable();
this.ngZone.runOutsideAngular(() => {
this.animationFrameId = requestAnimationFrame(this.doTick.bind(this));
});
}
ngOnDestroy() {
cancelAnimationFrame(this.animationFrameId);
}
protected doTick(frame: number) {
this.frameSource.next(frame);
this.ngZone.runOutsideAngular(() => {
requestAnimationFrame(this.doTick.bind(this));
});
}
}
@Injectable()
export class AnimationFrameService {
public tick: Observable<number>;
constructor(protected singleton: AnimationFrameServiceSingleton) {
this.tick = from(this.singleton.tick);
}
}