Не удается заставить keydown / keyup работать с блокировкой указателя / полноэкранным режимом - PullRequest
0 голосов
/ 02 апреля 2012

Моя проблема в том, что я недавно начал менять свое веб-приложение HTML5, чтобы использовать полноэкранный режим + блокировку указателя вместо перетаскивания мыши в окне.Приложение использует клавиатуру в дополнение к мыши, и раньше все работало нормально.Однако сейчас я не могу заставить работать какие-либо нажатия клавиш.Мышь с заблокированным указателем работает отлично.

Ранее я слушал нажатия клавиш, такие как:

document.onkeydown = handleKeyDown;
document.onkeyup = handleKeyUp;

, где handleKeyDown и Up - это функции, например:

function handleKeyUp(event) {
    doStuffWith(event.keyCode);
}

Теперь,Я добавил слушателей клавиатуры рядом с моим слушателем mousemove:

document.addEventListener('keyup', handleKeyUp(event), false);
document.addEventListener('keydown', handleKeyDown(event), false);

, где handleKey * такие же, как и выше, но doStuffWith ничего не делает.Кажется, получаются некоторые неопределенные события и больше ничего.Вероятно, это довольно элементарная проблема, но мне трудно ее решить.Большинство примеров и учебных пособий, которые я нашел в Google, не используют addEventListener, но вместо этого старый стиль, который я использовал ранее.

Я очень благодарен за любую помощь.

edit // Пояснение: так каксобытия не определены, doStuffWith вообще не вызывается, потому что выполнение останавливается при попытке прочитать .keyCode из undefined

1 Ответ

1 голос
/ 02 апреля 2012

Основная проблема заключается в том, что, согласно следующей странице MDN, буквенно-цифровые клавиши отключены в полноэкранном режиме:

https://developer.mozilla.org/en/DOM/Using_full-screen_mode#Things_your_users_want_to_know

Есть также несколько проблем с вашимкод.В строке

document.addEventListener('keyup', handleKeyUp(event), false);

... у вас есть две проблемы: во-первых, второй параметр должен быть ссылкой на функцию.На самом деле это ссылка на undefined, потому что вы вызываете функцию немедленно и передаете результат, а не передаете функцию.Во-вторых, в браузерах, которые поддерживают addEventListener, объект Event автоматически передается в функцию прослушивателя событий.Поэтому вы хотите:

function handleKeyUp(e) {
    doStuffWith(e.keyCode);
}

document.addEventListener('keyup', handleKeyUp, false);
...