UNPKG

toosoon-events

Version:

Project providing services implemented as singleton class instances

73 lines (72 loc) 2.56 kB
import { EventsManager } from './index'; /** * Utility class for creating mouse/touch events listeners * * @class PointerManager * @extends EventsManager */ class PointerManager extends EventsManager { listeners = { start: [], end: [], move: [] }; _pointers = []; bind(eventKey) { switch (eventKey) { case 'start': window.addEventListener('mousedown', this._onPointerStart); window.addEventListener('touchstart', this._onPointerStart); break; case 'end': window.addEventListener('mouseup', this._onPointerEnd); window.addEventListener('touchend', this._onPointerEnd); break; case 'move': window.addEventListener('mousemove', this._onPointerMove); window.addEventListener('touchmove', this._onPointerMove); break; } } unbind(eventKey) { switch (eventKey) { case 'start': window.removeEventListener('mousedown', this._onPointerStart); window.removeEventListener('touchstart', this._onPointerStart); break; case 'end': window.removeEventListener('mouseup', this._onPointerEnd); window.removeEventListener('touchend', this._onPointerEnd); break; case 'move': window.removeEventListener('mousemove', this._onPointerMove); window.removeEventListener('touchmove', this._onPointerMove); break; } } _setPointers(event) { this._pointers = []; if (event instanceof MouseEvent) { this._pointers.push({ x: event.clientX, y: event.clientY }); } else { for (let i = 0; i < event.touches.length; i++) { const touch = event.touches[i]; this._pointers.push({ x: touch.clientX, y: touch.clientY }); } } } _onPointerStart = (event) => { this._setPointers(event); this.listeners['start'].forEach((listener) => listener(this._pointers)); }; _onPointerEnd = (event) => { this._setPointers(event); this.listeners['end'].forEach((listener) => listener(this._pointers)); }; _onPointerMove = (event) => { this._setPointers(event); this.listeners['move'].forEach((listener) => listener(this._pointers)); }; } export default new PointerManager();