toosoon-events
Version:
Project providing services implemented as singleton class instances
32 lines (31 loc) • 803 B
JavaScript
import { EventManager } from './index';
/**
* Utility class for creating `requestAnimationFrame` listeners
*
* @class RafManager
* @extends EventManager
*/
class RafManager extends EventManager {
listeners = [];
time = 0;
_rafId;
bind() {
this.time = Date.now();
this._rafId = requestAnimationFrame(this._onUpdate);
}
unbind() {
cancelAnimationFrame(this._rafId);
this._rafId = 0;
}
update = () => {
const time = Date.now();
const delta = (time - this.time) / 1000;
this.time = time;
this.listeners.forEach((listener) => listener(time, delta));
};
_onUpdate = () => {
this.update();
this._rafId = requestAnimationFrame(this._onUpdate);
};
}
export default new RafManager();