我想禁用keydown事件,直到keydown事件内的脚本完成执行。
$(document).keydown(function(e){
if (e.keyCode == 40){
down(); //Assume down has some animate function executes for 1sec
}
});
目前,当我按下键并保持不释放时,keydown事件会反复触发,我想禁用它。
答案 0 :(得分:1)
一旦keydown事件发生,您可以取消绑定事件:
$(document).keydown(function(e){
if (e.keyCode == 40){
down(); //Assume down has some animate function executes for 1sec
$(document).unbind('keydown');
}
});
然后在动画完成后重新绑定down
函数(可能是回调函数)。
如果您对绑定/重新绑定不感兴趣,并且不喜欢icky全局变量,则可以使用类来指示动画是否正在进行中:
$(document).keydown(function(e){
if (e.keyCode == 40 && $('body').is(':not(.animating)')){
down(); //Assume down has some animate function executes for 1sec
$('body').addClass('animating');
}
});
然后在动画完成后在down
函数中将其删除,方式大致相同。
答案 1 :(得分:1)
保留一些变量并检查它
var isAnimating = false;
$(document).keydown(function(e){
if (!isAnimating && e.keyCode == 40){
isAnimating = true;
down(); //Assume down has some animate function executes for 1sec
isAnimating = false;
}
});
答案 2 :(得分:0)
绑定和重新绑定很昂贵。只需跟踪变量是否正在进行动画,并在再次执行之前进行检查:
var animating = false;
$(document).keydown(function(e){
if (e.keyCode == 40 && !animating){
down(); //Assume down has some animate function executes for 1sec
animating = true;
}
});
然后,您可以使用具有适当延迟的settimeout将动画设置为false;
答案 3 :(得分:0)
基于Asad答案的解决方案:
$(document).keydown(function(e){
if( $('body').hasClass('animating')){
//DO NOTHING
}
else{
if (e.keyCode == 40){
down(); //Assume down has some animate function executes for 1sec
$('body').addClass('animating');
}
}
});
$(document).keyup(function(e){
$('body').removeClass('animating');
});
答案 4 :(得分:-1)
您无法阻止事件触发,但您可以忽略它:
var keyIsDown = false;
$(document).keydown(function(e){
if(!keyIsDown) {
keyIsDown = true;
if (e.keyCode == 40){
down(); //Assume down has some animate function executes for 1sec
// set keyIsDown = false; on the animation callback, inside down func.
}
}
});