É possível substituir o atraso de repetição keydown em JavaScript?
O objetivo é definir manualmente a "taxa de repetição" de uma tecla retida.
Por exemplo, quando em uma caixa de texto e pressionando e segurando a tecla X, eu entendo que existemaneiras específicas do navegador de repetir o caractere pressionado. Em alguns, faz uma pausa e aciona continuamente a tecla pressionada. Em outros, não repete nada. Eu quero atenuar isso, forçando a tecla pressionada para repetir em um intervalo específico, independentemente do navegador.
Através de pesquisa, eu cheguei a uma tentativa baseada em temporizador, mas no Safari, não repete o personagem. Eu tenho um sistema de menu onde a seta pressionada rola pela lista, mas a animação de tradução e a taxa de repetição não gostam uma da outra.
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
} );
Eu posso ter estragado tudo isso ... Eu tentei recriar uma versão simplificada deeste post de SO. No entanto, sinto quetem ser uma maneira melhor de fazer isso. Alguma ideia?
Atualizar:
Podemos supor que o usuário final não definiu a taxa de repetição do seu sistema operacional maior do que a taxa que eu quero usar (1000ms). Se for, então deve retornar à taxa de repetição, já que não vai continuar acionando o evento chave da imprensa. Se não for (mais provavelmente, já que a maioria das pessoas não modifica isso), então estaríamos ignorando esse comportamento para fazê-lo atrasar o período especificado.