Проверьте, снижается ли ключ?

HttpModules. Архитектура сумасшедшая изящный. Возможно, не скрытая функция, но прохладный тем не менее.

81
задан Daniel X Moore 1 December 2009 в 20:17
поделиться

4 ответа

Есть ли способ определить, не работает ли в данный момент ключ в JavaScript?

Нет. Единственная возможность - это отслеживать каждую keyup и keydown и запоминать.

по прошествии некоторого периода времени клавиша начинает повторяться, срабатывая события keydown и keyup как дьявол.

] Не должно. Вы обязательно получите нажатие повторения, и во многих браузерах вы также получите повторное нажатие keydown , но если keyup повторяется, это ошибка.

К сожалению, это не совсем неслыханная ошибка: в Linux, Chromium и Firefox (когда он работает под GTK +, который есть в популярных дистрибутивах, таких как Ubuntu) оба генерируют повторяющиеся последовательности keyup-keypress-keydown для удерживаемых ключей, которых невозможно отличить от тех, кто быстро забивает ключ.

64
ответ дан 24 November 2019 в 09:26
поделиться

Я не верю, что существует что-то вроде функции 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];
}

Это должно выполнить то, что вы хотите .

11
ответ дан 24 November 2019 в 09:26
поделиться

Посмотрите на этот ответ и используйте onkeyup ] и при нажатии . Здесь содержится более подробная информация об этих событиях.

0
ответ дан 24 November 2019 в 09:26
поделиться

Другие люди уже задавали подобные вопросы раньше (хотя я не вижу любые очевидные обманы здесь прямо сейчас.

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

Что вы можете сделать, и, возможно, придется, если вам нужно заставить это работать, это программно отключить дребезг ключа. По сути, вы можете оценить keydown и keyup самостоятельно, но игнорировать событие keyup , если оно происходит слишком быстро после последнего keydown . .или, по сути, вам следует отложить ответ на keyup достаточно долго, чтобы быть уверенным, что за ним не последует другое событие keydown с примерно 0,25 секундой keyup .

Это будет включают использование таймера и запись миллисекунд для предыдущих событий. Не могу сказать, что это очень привлекательное решение, но ...

1
ответ дан 24 November 2019 в 09:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: