jQuery нажатие клавиши влево/вправо [дубликат]
этот вопрос уже есть ответ здесь:
- связывание клавиш со стрелками в JS / jQuery 16 ответов
Я хочу дать моему слайдеру контента возможность реагировать на нажатие клавиши (клавиша со стрелкой влево и клавиша со стрелкой вправо). Я читал о некоторых конфликтах между несколькими браузерами и операционными системами.
в пользователь может перемещаться по контенту, находясь на глобальном веб-сайте (теле).
Псевдо Код:
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
Мне нужно решение без каких-либо конфликтов кроссоверов (браузеров, OSs).
5 ответов
$("body").keydown(function(e) {
if(e.keyCode == 37) { // left
$("#showroom").animate({
left: "-=980"
});
}
else if(e.keyCode == 39) { // right
$("#showroom").animate({
left: "+=980"
});
}
});
$("body").keydown(function(e){
// left arrow
if ((e.keyCode || e.which) == 37)
{
// do something
}
// right arrow
if ((e.keyCode || e.which) == 39)
{
// do something
}
});
это отлично работает для меня:
$(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();
}
});
Я предпочитаю использовать этот шаблон:
$(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
}
});
использование выражения именованных функций может помочь сохранить более чистый код:
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];
});