2012-02-23 12 views
6

Me gustaría implementar teclas rápidas de teclado en una aplicación web. Hasta ahora he estado usando el jquery.hotkeys plugin, y me ha permitido implementar teclas de acceso rápido simples (por ejemplo, teclas simples como a).Cómo implementar teclas de acceso rápido similares a gmail

ahora para apoyar alguna de navegación más complejas a través del teclado, me gustaría poner en práctica teclas de acceso rápido '' llave en múltiples al igual que en Gmail, donde por ejemplo, pulsando g (por 'ir') seguido de i (para 'bandeja de entrada') te lleva a la bandeja de entrada.

¿Alguien sabe de un componente de javascript (jquery plugin o similar) para esa tarea? ¿O cuál sería un buen enfoque para implementar tales teclas rápidas?

Respuesta

7

Hay una mejor solución para esto usando keymaster con el complemento keymaster-sequence.

Las fuentes están aquí keymaster.js y aquí keymaster.sequence.js

usarlos como esto:

<script type="text/javascript" src="https://raw.github.com/madrobby/keymaster/master/keymaster.min.js"></script> 
<script type="text/javascript" src="https://raw.github.com/chevalric/keymaster-sequence/master/keymaster.sequence.min.js"></script> 
<script> 
key.sequence(["g","i"], function() { 
    var el = document.getElementById("result"); 
    el.innerHTML = "You first pressed 'g', then you pressed 'i'"; 
}); 

</script> 
<div id="result"></div> 

Aquí hay una pequeña demostración http://jsfiddle.net/Nwdyd/1/ que también muestra el manejo de colisión (unión g, así como g i)

+0

Ejecutando la muestra como lo hacen los enlaces de src desde raw.github.com que ya no funcionan para mí; pero los proyectos Github vinculados funcionan con código local. – Nate

+1

Los enlaces se resuelven bien. Sin embargo, solo se incluyen con fines de demostración y ** NO ** se debe usar como CDN. – ocodo

+0

Tal vez lo arruiné, pero copié/pegué eso exactamente en mi aplicación y no funcionó, cuando copié el contenido en archivos locales, funcionó muy bien. – Nate

4

Establezca un valor booleano global cuando se presiona g. Luego verifique si está configurado cuando se presiona i. Opcionalmente puede implementar un tiempo de espera en la prensa g para que tenga tiempo limitado para presionar i después.

var goPressed = false; 
function hotkeyPressed (event) { 
    if (event.keyCode == KEYCODE_FOR_G) { 
     goPressed == true; 
     //Optionally: 
     setTimeout(clearPresses, 3000); 
    } 
    if (event.keyCode == KEYCODE_FOR_I && goPressed) { 
     gotoInbox(); 
    } 
} 

function clearPresses() { 
    goPressed = false; 
} 
+0

No es tan fácil. Las dos teclas se deben presionar dentro de un tiempo de definición, para formar una tecla de acceso rápido válida. – M4N

+0

Para eso sirve mi función clearPresses ... Si no presiona i dentro de 3000 milisegundos, el valor booleano vuelve a ser falso. –

+0

3 segundos es un MUCHO tiempo en la zona de pulsación de teclas. – ocodo

3

Se podría seguir utilizando el plugin mediante la adición de un estado y un tiempo de espera, tanto como Matt Fellows sugiere.

var gWasPressed = false;  

var clearKeyState = function() { 
    gWasPressed = false; 
} 

var changeKeyState = function() { 
    gWasPressed = true; 
    setTimeout(clearKeyState, 3000); 
} 

$(document).bind('keydown', 'g', changeKeyState); 
$(document).bind('keydown', 'i', commandI); 

var commandI = function() { 
    if (gWasPressed) { 
    // go to inbox 
    clearKeyState(); 
    } else { 
    // do whatever i was supposed to do if g wasn't pressed 
    } 
} 

solución alternativa sería volver a enlazar las teclas cuando se presiona g, y desenlazar ellos cuando el tiempo de espera expira o cuando se pulsa la tecla secundaria i.

1

Hay una nueva versión de hotKeys.js que funciona con la versión 1.10+ de jQuery. Es pequeño, archivo de javascript de 100 líneas. 4kb o solo 2kb minificado. Aquí están algunos ejemplos de uso son simples:

$('#myBody').hotKey({ key: 'c', modifier: 'alt' }, doSomething); 

$('#myBody').hotKey({ key: 'f4' }, doSomethingElse); 

$('#myBody').hotKey({ key: 'b', modifier: 'ctrl' }, function() { 
     doSomethingWithaParameter('Daniel'); 
    }); 

$('#myBody').hotKey({ key: 'd', modifier :'shift' }, doSomethingCool); 

Clonar el repositorio de GitHub: https://github.com/realdanielbyrne/HoyKeys.git o ir a la página de recompra github https://github.com/realdanielbyrne/HoyKeys o tenedor y contribuir.

Cuestiones relacionadas