Клавиатура Javascript работает не так, как ожидалось, она выполняется в тех случаях, когда я не убирал палец с кнопки.

Я пытаюсь создать простую игру на javascript, и я застрял в том, как обращаться с ключами.

Небольшой пример:

function keyUpEvent(event) {
    alert(event.keyCode);
}
window.addEventListener("keyup", keyUpEvent, false);

Я запускаю Ubuntu 9.10 и тестирую его в Firefox 3.5 и Chromium.

Если я немедленно нажимаю и отпускаю кнопку, я получаю предупреждение, чего и следовало ожидать, но когда я нажимаю и удерживаю кнопку, я получаю небольшую паузу, а затем серию окон предупреждений, ожидаемый результат - я получаю только предупреждение окно, когда я убираю палец с кнопки.

Я считаю, что это как-то связано с тем фактом, что когда я нажимаю и удерживаю кнопку в текстовой области, например, я получаю один символ, небольшую паузу, а затем серию символов: ddddddddddddddd.

Я считаю, что можно обойти это или сделать это более правильно, или что-то еще, например, с этой игры: http://bohuco.net/testing/gamequery/pong.html это не повлияет на швы. Но я заметил, что если попробую демонстрацию jquery keyup (api.jquery.com/keyup/), у меня возникнет та же проблема.

Как я могу реализовать базовую обработку ключевых событий игры?


person Binni    schedule 02.05.2010    source источник
comment
api.jquery.com/keyup у меня отлично работает в FF3.6 и Chrome под Vista - Событие keyup распознается только тогда, когда я отпускаю клавишу, и удерживание клавиши нажатой не вызывает события keyup. Вы на 100% уверены, что случайно не улавливаете события нажатия клавиш? События нажатия клавиш идентичны описанному вами поведению.   -  person Jon Cram    schedule 02.05.2010
comment
Я думаю, что проблема с этим в ubuntu и, возможно, вообще в Linux. Послушайте, у меня есть аналогичный вопрос stackoverflow.com/questions/5254034/   -  person gadlol    schedule 30.06.2011


Ответы (1)


В приведенном вами примере есть решение - почему бы не последовать ему?

Он использует таймер после keyDown и не вызывает прямую функцию, которая выполняет эту работу. И это уловка, вы должны использовать таймер.

Вот похожая проблема, которая может дать вам еще одно представление.

person Aristos    schedule 02.05.2010