toosoon-events
Version:
Project providing services implemented as singleton class instances
39 lines (38 loc) • 1.11 kB
JavaScript
import { EventManager } from './index';
/**
* Utility class for creating resize event listeners
*
* @class ResizeManager
* @extends EventManager
*/
class ResizeManager extends EventManager {
listeners = [];
width = 0;
height = 0;
_debounceDelay = 10; // in ms
_timeout;
bind() {
window.addEventListener('resize', this._onResize);
window.addEventListener('orientationchange', this._onResize);
}
unbind() {
window.removeEventListener('resize', this._onResize);
window.removeEventListener('orientationchange', this._onResize);
}
resize = () => {
this.width = window.innerWidth;
this.height = window.innerHeight;
this.listeners.forEach((listener) => listener(this.width, this.height));
};
_onResize = () => {
clearTimeout(this._timeout);
this._timeout = setTimeout(this.resize, this._debounceDelay);
};
get debounceDelay() {
return this._debounceDelay;
}
set debounceDelay(delay) {
this._debounceDelay = delay;
}
}
export default new ResizeManager();