toosoon-events
Version:
Project providing services implemented as singleton class instances
73 lines (72 loc) • 2.56 kB
JavaScript
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();