2010-11-05 11 views
35

Quiero darle a mi control deslizante de contenido la capacidad de responder a la tecla presionar (tecla FLECHA IZQUIERDA y tecla FLECHA DERECHA). He leído sobre algunos conflictos entre varios navegadores y sistemas operativos.jQuery keypress left/right navigation

El usuario puede navegar por el contenido mientras se encuentra en el sitio web global (cuerpo).

Pseudo Código:

ON Global Document 

IF Key Press LEFT ARROW 

THEN animate #showroom css 'left' -980px 


IF Key Press RIGHT ARROW 

THEN animate #showroom css 'left' +980px 

necesito una solución sin ningún cruce (navegadores, sistemas operativos) conflictos.

Respuesta

86
$("body").keydown(function(e) { 
    if(e.keyCode == 37) { // left 
    $("#showroom").animate({ 
     left: "-=980" 
    }); 
    } 
    else if(e.keyCode == 39) { // right 
    $("#showroom").animate({ 
     left: "+=980" 
    }); 
    } 
}); 
+7

¿No deberíamos usar 'which' en lugar de' keyCode' ahora con jQuery? – Shikiryu

+0

No lo sé, pero mira la demostración en http://api.jquery.com/keydown/ Allí, se usa e.keyCode. – elektronikLexikon

+0

sí, debe usar .which() para obtener el código clave. La excepción es si está tratando de obtener entrada de texto sin formato antes de cualquier normalización (supongo que esto significa cosas como detectar la tecla £ en lugar de simplemente el carácter £) – carpii

15
$("body").keydown(function(e){ 
    // left arrow 
    if ((e.keyCode || e.which) == 37) 
    { 
     // do something 
    } 
    // right arrow 
    if ((e.keyCode || e.which) == 39) 
    { 
     // do something 
    } 
}); 
+0

Si usamos "cual" den es suficiente – GOK

6

Esto funciona muy bien para mí:

$(document).keypress(function (e){ 
    if(e.keyCode == 37) // left arrow 
    { 
     // your action here, for example 
     $('#buttonPrevious').click(); 
    } 
    else if(e.keyCode == 39) // right arrow 
    { 
     // your action here, for example 
     $('#buttonNext').click(); 
    } 
}); 
+1

Si usamos "que" en el mundo Jquery puro – GOK

1

Yo prefiero usar esta plantilla:

$(document).keypress(function(e){ 
    switch((e.keyCode ? e.keyCode : e.which)){ 
     //case 13: // Enter 
     //case 27: // Esc 
     //case 32: // Space 
     case 37: // Left Arrow 
      $("#showroom").animate({left: "+=980"}); 
     break; 
     //case 38: // Up Arrow 
     case 39: // Right Arrow 
      $("#showroom").animate({left: "-=980"}); 
     break; 
     //case 40: // Down Arrow 
    } 
}); 
1

El uso de funciones con nombre expresión puede ayudar a mantener un código más limpio:

function go_left(){console.log('left');} 
function go_up(){console.log('up');} 
function go_right(){console.log('right');} 
function go_down(){console.log('down');} 


$(document).on('keydown',function(e){ 

    var act={37:go_left, 38:go_up, 39:go_right, 40:go_down}; 
    if(act[e.which]) var a=new act[e.which]; 

}); 
Cuestiones relacionadas