1
0
Fork 0
Nibriboard/Nibriboard/ClientFiles/Utilities/Keyboard.js

53 lines
1.4 KiB
JavaScript

"use strict";
window.EventEmitter = require("event-emitter-es6");
window.keycode = require("keycode");
/**
* Makes handling keyboard input just that little bit easier.
*/
class Keyboard extends EventEmitter
{
constructor()
{
super();
/**
* The keyCodes of the keyboard keys that are currently pressed down.
* @type {[number]}
*/
this.DownKeys = [];
document.addEventListener("keydown", this.handleKeyDown.bind(this));
document.addEventListener("keyup", this.handleKeyUp.bind(this));
}
/**
* Handles keydown events.
* @param {KeyboardEvent} event The keyboard event to handle.
*/
handleKeyDown(event) {
if(!this.DownKeys.includes(event.keyCode))
this.DownKeys.push(event.keyCode);
console.log("DownKeys:", this.DownKeys);
console.debug("[keyboard] Emitting key down event", `keydown-${keycode(event.keyCode)}`);
this.emit(`keydown-${keycode(event.keyCode)}`, event);
}
/**
* Handles keyup events.
* @param {KeyboardEvent} event The keyboard event to handle.
*/
handleKeyUp(event) {
if(this.DownKeys.indexOf(event.keyCode) !== -1)
this.DownKeys.splice(this.DownKeys.indexOf(event.keyCode), 1);
console.log("DownKeys:", this.DownKeys);
console.debug("[keyboard] Emitting key up event", `keyup-${keycode(event.keyCode)}`);
this.emit(`keyup-${keycode(event.keyCode)}`, event);
}
}
export default Keyboard;