Слушайте несколько нажатий клавиш
Я пытаюсь позволить пользователю перемещать элемент на странице с помощью клавиш со стрелками. Пока что у меня есть движение, работающее вверх / вниз / влево / вправо, но не по диагонали (две клавиши со стрелками нажаты одновременно).
Мой слушатель выглядит так:
addEventListener('keydown', function(e){
move = false;
x = false;
y = false;
var keycode;
if (window.event) keycode = window.event.keyCode;
else if (e) keycode = e.which;
switch(keycode){
case 37:
move = true;
x = 'negative';
//prevent page scroll
e.preventDefault()
break;
case 38:
move = true;
y = 'negative'
//prevent page scroll
e.preventDefault()
break;
case 39:
move = true;
x = 'positive'
//prevent page scroll
e.preventDefault()
break;
case 40:
move = true;
y = 'positive'
//prevent page scroll
e.preventDefault()
break;
}
if(move){
animation.move(x,y);
}
return false;
})
Идея заключалась в том, что если пользователь нажимает клавишу со стрелкой, он устанавливаетx
а такжеy
либоnegative
или жеpositive
и запускает функцию move (), которая будет перемещать элемент на заданное количество пикселей в нужном направлении, и что при нажатии двух клавиш будет запущено второе событие ... Я также надеюсь, что смогу получить пользователь, кажется, безошибочно меняет направление, быстро нажимая и нажимая клавиши. Ничего из этого не происходит, однако, если пользователь нажимает другую клавишу со стрелкой, ему, похоже, нужно подождать, пока произойдет движение, если только он полностью не отпустит клавишу, а затем не нажмет еще одну. и он не будет реагировать на второй ключ вообще, пока первый не будет выпущен.