Объект вручную устанавливает удерживаемый ключ "частота повторения".
Например, когда в текстовом поле и нажав и удерживая клавишу 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. Тем не менее, я считаю, что должен быть лучший способ сделать это. Любые мысли?
Update:
Мы можем предположить, что конечный пользователь не установил скорость повторения клавиатуры ОС больше, чем скорость, которую я хочу использовать (1000 мс). Если это так, тогда он должен вернуться к своей частоте повтора, так как он не будет продолжать запускать ключевое событие пресса. Если это не так (более вероятно, так как большинство людей не модифицируют это), то мы будем переопределять это поведение, чтобы задержать наш указанный период.