键控效果,如果在效果完成之前键控,则发出警报

Keydown effect, alert if keyup before effect finishes

本文关键字:如果      更新时间:2023-09-26

我的目标:在效果发生时按住空格键(模拟指纹扫描)。若用户在效果结束前释放按键,我想显示一条确认消息。keydown部分工作正常,并进入功能"进程",但如果在效果结束前释放keyup,则不会在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");
      } 
    }
});

验证是否在第一个幻灯片向下动画中释放了关键帧。根据您的代码,一旦它开始向上滑动,您的活动将被设置为false,然后使其生效,这样keyup事件就不会触发。

另外,我建议在JavaScript中使用triple=。

您的代码似乎可以在这里工作:http://jsfiddle.net/D52eq/但请注意,只有在效果的.slideDown()阶段释放空格键时才会出现确认消息——您在.slideUp()调用之前设置active = false;

如果你想确认空格键是否在整个动画和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替换了active == false

演示:http://jsfiddle.net/D52eq/1/