File

src/utils/animation-frame.service.ts

Index

Properties
Methods

Constructor

constructor(ngZone: NgZone)
Parameters :
Name Type Optional
ngZone NgZone No

Methods

Protected doTick
doTick(frame: number)
Parameters :
Name Type Optional
frame number No
Returns : void
ngOnDestroy
ngOnDestroy()
Returns : void

Properties

Protected animationFrameId
Type : number
Protected frameSource
Default value : new Subject<number>()
Public tick
Type : Observable<number>
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);
	}
}

results matching ""

    No results matching ""