HttpModules. Архитектура сумасшедшая изящный. Возможно, не скрытая функция, но прохладный тем не менее.
Есть ли способ определить, не работает ли в данный момент ключ в JavaScript?
Нет. Единственная возможность - это отслеживать каждую keyup
и keydown
и запоминать.
по прошествии некоторого периода времени клавиша начинает повторяться, срабатывая события keydown и keyup как дьявол.
] Не должно. Вы обязательно получите нажатие
повторения, и во многих браузерах вы также получите повторное нажатие keydown
, но если keyup
повторяется, это ошибка.
К сожалению, это не совсем неслыханная ошибка: в Linux, Chromium и Firefox (когда он работает под GTK +, который есть в популярных дистрибутивах, таких как Ubuntu) оба генерируют повторяющиеся последовательности keyup-keypress-keydown для удерживаемых ключей, которых невозможно отличить от тех, кто быстро забивает ключ.
Я не верю, что существует что-то вроде функции isKeyDown, но вы могли бы написать свою собственную.
По сути, создайте массив, длина которого равна количеству ключей, которые вы хотите отслеживать. Затем, используя события keyUp и keyDown в документах / страницах / элементах управления, обновите массив, указав состояние этого ключа.
Затем напишите функцию, которая проверяет, не работает ли определенный ключ, и возвращает логическое значение.
var keyEnum = { W_Key:0, A_Key:1, S_Key:2, D_Key:3 };
var keyArray = new Array(4);
function onKeyDown()
{
// Detect which key was pressed
if( key == 'w' )
keyArray[keyEnum.W_Key] = true;
// Repeat for each key you care about...
}
function onKeyUp()
{
// Detect which key was released
if( key == 'w' )
keyArray[keyEnum.W_Key] = false;
// Repeat for each key you care about...
}
function isKeyDown(key)
{
return keyArray[key];
}
Это должно выполнить то, что вы хотите .
Посмотрите на этот ответ и используйте onkeyup
] и при нажатии
. Здесь содержится более подробная информация об этих событиях.
Другие люди уже задавали подобные вопросы раньше (хотя я не вижу любые очевидные обманы здесь прямо сейчас.
Я думаю, что ответ заключается в том, что событие keydown
(и его двойник keyup
) - это вся информация, которую вы получаете. Повторение довольно прочно встроено в операционную систему, и прикладная программа не имеет особых возможностей запрашивать в BIOS фактическое состояние ключа.
Что вы можете сделать, и, возможно, придется, если вам нужно заставить это работать, это программно отключить дребезг ключа. По сути, вы можете оценить keydown
и keyup
самостоятельно, но игнорировать событие keyup
, если оно происходит слишком быстро после последнего keydown
. .или, по сути, вам следует отложить ответ на keyup
достаточно долго, чтобы быть уверенным, что за ним не последует другое событие keydown
с примерно 0,25 секундой keyup
.
Это будет включают использование таймера и запись миллисекунд для предыдущих событий. Не могу сказать, что это очень привлекательное решение, но ...