Как отключить повторное keydown в jQuery
Когда пользователь удерживает нажатой клавишу, я хочу, чтобы событие keydown() вызывалось только один раз, но его вызывали до тех пор, пока пользователь не перестанет нажимать клавишу.
Вот что я пытаюсь сделать:
$(document).keydown(function(event){
var keycode = (event.keyCode ? event.keyCode : event.which);
if(keycode == '39'){
$("#box").animate({"left": "+=30px"}, "fast");
}
});
Итак, когда пользователь нажимает клавишу со стрелкой вправо, я хочу, чтобы поле div # переместило 30 пикселей вправо. Он перемещается, но если пользователь удерживает нажатой клавишу, он улетает.
Мне нужно, чтобы он перемещался только на 30 пикселей на прессу и останавливался, даже если пользователь удерживает нажатой клавишу. Вы знаете, как это можно сделать?
Ответы
Ответ 1
Следите за тем, какие клавиши опущены, и игнорируйте код клавиатуры до тех пор, пока клавиатура не очистит его.
var down = {};
$(document).keydown(function(event){
var keycode = (event.keyCode ? event.keyCode : event.which);
if(keycode == '39'){
if (down['39'] == null) { // first press
$("#box").animate({"left": "+=30px"}, "fast");
down['39'] = true; // record that the key down
}
}
});
$(document).keyup(function(event) {
var keycode = (event.keyCode ? event.keyCode : event.which);
down[keycode] = null;
});
Ответ 2
сохранить флаг и повернуть его зеленым на keydown
, я бы предложил keyup
, хотя
$(document).keydown(function(event){
$flag=false;
var keycode = (event.keyCode ? event.keyCode : event.which);
if(keycode == '39'){
if(!$flag){
$flag=true;
$("#box").animate({"left": "+=30px"}, "fast");
}
}
});