2

我的目标:在效果发生时按住空格键(模拟指纹扫描)。如果用户在效果完成之前释放键,我想显示一条确认消息。keydown 部分工作正常并继续执行“处理”功能,但如果在效果完成之前释放它,则不会在 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");
      } 
    }
});
4

2 回答 2

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;
      })
    }
});

请注意,然后您可以将 and 链接.slideDown()起来.slideUp(),您不需要提供回调函数到.slideDown(). 我也换成active == false!active.

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

于 2012-09-11T01:18:00.887 回答
0

确认您在第一个 slideDown 动画期间释放了键。根据您的代码,一旦它开始向上滑动,您的活动将设置为 false,然后将其设置为不会触发 keyup 事件。

另外作为旁注,我建议在 JavaScript 中使用三重 =。

于 2012-09-11T01:14:11.767 回答