2

私の目標:効果が発生している間、スペースキーを押し続けます(指紋スキャンをシミュレートするため)。エフェクトが終了する前にユーザーがキーを離した場合、確認メッセージを表示したい。keydown の部分は正常に動作し、関数 "process" に進みますが、効果が終了する前にキーアップを離すと、エラー メッセージは表示されません。これは私が持っているものです...

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

最初のslideDownアニメーション中にキーを離していることを確認します。あなたのコードによると、それが上にスライドし始めると、あなたのアクティブはfalseに設定され、それからそれを作り、キーアップイベントがトリガーされないようにします。

また、補足として、JavaScriptでtriple=を使用することをお勧めします。

于 2012-09-11T01:14:11.767 に答える
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

デモ: http: //jsfiddle.net/D52eq/1/

于 2012-09-11T01:18:00.887 に答える