Как вызвать onkeydown после onkeyup? - PullRequest
0 голосов
/ 17 мая 2018

Я реализовал следующее:

var map = {};
document.onkeydown = document.onkeyup = function(e){
    e = e || event;
    map[e.keyCode] = e.type == 'keydown';

    if(map[38] && map[37]){ // UP + LEFT
        console.log('Up Left');
    }
    else if(map[38] && map[39]){ // UP + RIGHT
        console.log('Up Right');
    }
    else if(map[38]){ // UP
        console.log('Up');
    }
    else if(map[40]){ // DOWN
        console.log('Down');
    }
    else if(map[37]){ // LEFT
        console.log('Left');
    }
    else if(map[39]){ // RIGHT
        console.log('Right');
    }
}

Если я сейчас нажму кнопку «вверх» на моей клавиатуре, моя консоль будет несколько раз входить в систему.Пока я удерживаю кнопку «вверх» и начинаю также нажимать левую кнопку, моя консоль начинает многократно регистрировать «вверх влево».

Теперь я отпускаю левую кнопку, и моя консоль регистрирует только один раз «вверх», но больше не регистрирует ее повторно.

Как мне этого добиться?

Я попытался найти ответ здесь, на StackOverflow.Но я только нашел решение, что он только один раз "включается" после того, как я отпущу левую кнопку.

Может кто-нибудь помочь или хотя бы дать подсказку, пожалуйста?

1 Ответ

0 голосов
/ 17 мая 2018

Теперь я отпускаю левую кнопку, и моя консоль регистрирует только один раз «вверх», но больше не регистрирует ее повторно.

Это поведение по умолчанию для обработки ключевых событий, даже в обычныхтекстовые редакторы, как описано в этом ответе.

Как мне этого добиться?

Если под этим вопросом вы имеете в виду, как вы можете продолжить печать "вверх ", пока нажата кнопка ВВЕРХ, вам придется изменить свой подход.

Одним из возможных подходов может быть удержание состояния нажатых клавиш в поле карты и повторное вывод состояния в короткий промежуток времени.Например, попробуйте этот код:

var map = {};
document.onkeydown = document.onkeyup = function(e){
    map[e.keyCode] = e.type == 'keydown';
}

logKeyState = function(){
    if(map[38] && map[37]){ // UP + LEFT
        console.log('Up Left');
    }
    else if(map[38] && map[39]){ // UP + RIGHT
        console.log('Up Right');
    }
    else if(map[38]){ // UP
        console.log('Up');
    }
    else if(map[40]){ // DOWN
        console.log('Down');
    }
    else if(map[37]){ // LEFT
        console.log('Left');
    }
    else if(map[39]){ // RIGHT
        console.log('Right');
    }
    setTimeout(logKeyState,50);
}
//Start logging  
logKeyState();
...