Можно ли переопределить задержку повторения нажатия клавиши в JavaScript?

Цель вручную установить «частоту повторения» удерживаемой клавиши.

Например, находясь в текстовом поле и нажимая и удерживая клавишу X, я понимаю, что существуют браузерные -специфические способы повторения нажатого символа . В некоторых он делает паузу, затем непрерывно срабатывает нажатая клавиша. В других вообще не повторяется. Я хочу смягчить это, заставив нажатую клавишу повторяться через определенный интервал, независимо от браузера.

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

var repeating = false;
var repeatRateTimer = null;

$( document ).bind( 'keyup', function( input ) {
    if( repeatRateTimer != null )
    {
        clearTimeout( repeatRateTimer );
        repeatRateTimer = null;
    }

    repeating = false;
} );

$( document ).bind( 'keydown', function( input ) {
    input.preventDefault( );

    if( repeating == true )
    {
        if( repeatRateTimer != null )
        {
            clearTimeout( repeatRateTimer );
            repeatRateTimer = null;
        }
        else
        {
            repeatRateTimer = setTimeout( function( ){ repeating = false; }, 1000 );
        }

        return;
    }
    repeating = true;

    //...keyboard logic
} );

Возможно, я все это испортил... Я попытался воссоздать упрощенную версию этого поста SO . Тем не менее, я чувствую, что должен быть лучшим способом сделать это. есть идеи?

Обновление:

Мы можем предположить, что конечный -пользователь не установил частоту повторения клавиатуры своей ОС выше скорости, которую я хочу использовать (1000 мс ). Если это так, то он должен вернуться к их частоте повторения, поскольку он не будет инициировать событие нажатия клавиши. Если это не (более вероятно, поскольку большинство людей не модифицируют это ), тогда мы переопределим это поведение, чтобы оно задержало указанный нами период.

11
задан Community 23 May 2017 в 11:47
поделиться