我的目标:在效果发生时按住空格键(模拟指纹扫描)。如果用户在效果完成之前释放键,我想显示确认消息。 keydown部分工作正常并继续执行“process”功能,但如果在效果完成之前释放它,则keyup上不会显示任何错误消息。这就是我的......
var active = false;
$(document).one("keydown", function(e) {
if ((e.keyCode == 32) && (active == false)) {
active = true;
$(".panel_1").slideDown(5000, function() {
active = false;
$(".panel_1").slideUp(2000, function() {process(); })
});
}
});
$(document).one("keyup",function(e) {
if ((e.keyCode == 32) && (active == true)) {
var r=confirm("Oops! You must HOLD down the space key until scan is complete. Press OK to try again, or Cancel to return to homepage.");
if (r==true) {
reset();
}
else {
window.location.replace("home.html");
}
}
});
答案 0 :(得分:0)
确认您在第一个slideDown动画期间释放了该键。根据你的代码,一旦它开始向上滑动,你的active将设置为false,然后使它成为keyup事件不会触发。
另外作为旁注,我建议在JavaScript中使用triple =。
答案 1 :(得分:0)
您的代码似乎在这里工作:http://jsfiddle.net/D52eq/但请注意,只有在效果的.slideDown()
阶段释放空格键时才会出现确认消息 - 您正在设置active = false;
之前 .slideUp()
来电。
如果您希望在完成整个动画和process()
调用之前释放空格键进行确认,请尝试以下操作:
$(document).one("keydown", function(e) {
if ((e.keyCode == 32) && (!active)) {
active = true;
$(".panel_1").slideDown(5000).slideUp(2000, function() {
process();
active = false;
})
}
});
请注意,您只需将.slideDown()
和.slideUp()
链接起来,就不需要向.slideDown()
提供回调函数。此外,我已将active == false
替换为!active
。