72 lines
2.3 KiB
JavaScript
72 lines
2.3 KiB
JavaScript
class Keyboard {
|
|
constructor(onKeydown) {
|
|
this._pressed = {};
|
|
this.cb_onKeydown = onKeydown;
|
|
|
|
window.addEventListener('keydown', e => this.onKeydown(e));
|
|
window.addEventListener('keyup', e => this.onKeyup(e));
|
|
|
|
window.addEventListener('touchstart', e => this.onTouchStart(e));
|
|
window.addEventListener('touchmove', e => this.onTouchMove(e));
|
|
window.addEventListener('touchend', e => this.onTouchEnd(e));
|
|
|
|
}
|
|
|
|
setKeydown(fn) {
|
|
this.cb_onKeydown = fn;
|
|
}
|
|
|
|
isDown(keyCode) {
|
|
return this._pressed[keyCode];
|
|
}
|
|
onKeydown(event) {
|
|
this._pressed[event.code] = true;
|
|
if (this.cb_onKeydown) this.cb_onKeydown(event);
|
|
}
|
|
onKeyup(event) {
|
|
delete this._pressed[event.code];
|
|
}
|
|
|
|
|
|
onTouchStart(e) {
|
|
var touchobj = e.changedTouches[0] // reference first touch point (ie: first finger)
|
|
this.touchX = parseInt(touchobj.clientX) // get x position of touch point relative to left edge of browser
|
|
this.touchY = parseInt(touchobj.clientY) // get x position of touch point relative to left edge of browser
|
|
window.dispatchEvent(new KeyboardEvent('keydown',{'code':'Space'}));
|
|
window.dispatchEvent(new KeyboardEvent('keydown',{'code':'KeyN'}));
|
|
e.preventDefault()
|
|
}
|
|
onTouchMove(e) {
|
|
var touchobj = e.changedTouches[0] // reference first touch point for this event
|
|
var dist = parseInt(touchobj.clientX) - this.touchX
|
|
if (dist>0) {
|
|
delete this._pressed['ArrowLeft'];
|
|
this._pressed['ArrowRight'] = true;
|
|
} else if (dist<0) {
|
|
delete this._pressed['ArrowRight'];
|
|
this._pressed['ArrowLeft'] = true;
|
|
} else {
|
|
delete this._pressed['ArrowLeft'];
|
|
delete this._pressed['ArrowRight'];
|
|
}
|
|
|
|
dist = parseInt(touchobj.clientY) - this.touchY
|
|
if (dist>0) {
|
|
delete this._pressed['ArrowUp'];
|
|
this._pressed['ArrowDown'] = true;
|
|
} else if (dist<0) {
|
|
delete this._pressed['ArrowDown'];
|
|
this._pressed['ArrowUp'] = true;
|
|
} else {
|
|
delete this._pressed['ArrowUp'];
|
|
delete this._pressed['ArrowDown'];
|
|
}
|
|
|
|
e.preventDefault()
|
|
}
|
|
onTouchEnd(e) {
|
|
this._pressed = {};
|
|
}
|
|
|
|
|
|
} |