InputHandler: prevent default for relavant keys

This commit is contained in:
Matthias Schiffer 2016-01-08 12:18:40 +01:00
parent 9f74746b2e
commit 4de2a6636a
3 changed files with 31 additions and 2 deletions

View file

@ -11,6 +11,16 @@ import MapContext from './control/MapContext';
import MapData from './model/MapData'; import MapData from './model/MapData';
import InputHandler from './view/InputHandler'; import InputHandler from './view/InputHandler';
import * as util from './util';
var relevantKeys = [
InputHandler.Up,
InputHandler.Right,
InputHandler.Down,
InputHandler.Left,
];
var mapContext: MapContext; var mapContext: MapContext;
@ -19,7 +29,7 @@ window.onload = () => {
xhr.onload = function() { xhr.onload = function() {
var mapDef = new MapData(JSON.parse(this.responseText)); var mapDef = new MapData(JSON.parse(this.responseText));
var inputHandler = new InputHandler(); var inputHandler = new InputHandler(util.numberArrayToMap(relevantKeys));
mapContext = new MapContext(mapDef, inputHandler); mapContext = new MapContext(mapDef, inputHandler);
} }

View file

@ -11,3 +11,12 @@ export function mapPromises<T>(promises: {[key: string]: Promise<T>}): Promise<{
return Promise.all(p).then(() => ret); return Promise.all(p).then(() => ret);
} }
export function numberArrayToMap(arr: number[]): {[key: number]: boolean} {
var ret: {[key: number]: boolean} = {};
for (let v of arr)
ret[v] = true;
return ret;
}

View file

@ -13,8 +13,13 @@ class InputHandler {
this.listeners.forEach(l => l()); this.listeners.forEach(l => l());
} }
constructor() { constructor(private relevantKeys: {[key: number]: boolean}) {
window.addEventListener('keydown', (ev) => { window.addEventListener('keydown', (ev) => {
if (!relevantKeys[ev.keyCode])
return;
ev.preventDefault();
if (!this.keys[ev.keyCode]) { if (!this.keys[ev.keyCode]) {
this.keys[ev.keyCode] = true; this.keys[ev.keyCode] = true;
this.callListeners(); this.callListeners();
@ -22,6 +27,11 @@ class InputHandler {
}); });
window.addEventListener('keyup', (ev) => { window.addEventListener('keyup', (ev) => {
if (!relevantKeys[ev.keyCode])
return;
ev.preventDefault();
if (this.keys[ev.keyCode]) { if (this.keys[ev.keyCode]) {
delete this.keys[ev.keyCode]; delete this.keys[ev.keyCode];
this.callListeners(); this.callListeners();