Слушайте несколько нажатий клавиш

Я пытаюсь позволить пользователю перемещать элемент на странице с помощью клавиш со стрелками. Пока что у меня есть движение, работающее вверх / вниз / влево / вправо, но не по диагонали (две клавиши со стрелками нажаты одновременно).

Мой слушатель выглядит так:

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 (), которая будет перемещать элемент на заданное количество пикселей в нужном направлении, и что при нажатии двух клавиш будет запущено второе событие ... Я также надеюсь, что смогу получить пользователь, кажется, безошибочно меняет направление, быстро нажимая и нажимая клавиши. Ничего из этого не происходит, однако, если пользователь нажимает другую клавишу со стрелкой, ему, похоже, нужно подождать, пока произойдет движение, если только он полностью не отпустит клавишу, а затем не нажмет еще одну. и он не будет реагировать на второй ключ вообще, пока первый не будет выпущен.

Ответы на вопрос(3)

Ваш ответ на вопрос