1

ユーザーがキーボードで同じ文字を 1 秒以内に 2 回押したかどうかを検出する簡単な方法があるかどうか疑問に思っていました。そのような動作をするコードを書きましたが、信頼性がありません。

var escapeCount = 0;

 function reset() {
   escapeCount = 0;
   setTimeout('reset();', 1000);
 }

 window.onload = function() {
   reset();
 };

 document.onkeyup = function(e) {
   if (!e) var e = window.event;
   var code = e.keyCode ? e.keyCode : e.which;
   if (code == 27) escapeCount +=1;
   if (escapeCount == 2) {
     // stuff on second escape
   }
 };

これを行うより良い方法はありますか?ありがとう

4

2 に答える 2

5

最後の文字が押されてから1秒が経過した後にリセットするのは理にかなっています。例:

var lastChar = -1;

document.onkeyup = function(e) {
  if (!e) var e = window.event;
  var code = e.keyCode ? e.keyCode : e.which;

  if (lastChar == code) {
    // Same key was pressed twice in a row within 1 second.
  } else {
    lastChar = code;
    setTimeout(function() {lastChar = -1;}, 1000);
  }
};
于 2010-01-22T01:24:13.783 に答える
0

タイマーは毎秒リセットされるので、最後のエスケープから1秒以内にもう一度エスケープを押す必要があるだけでなく、押す間にタイムアウトが発生する必要もありません。

タイムアウトを忘れて、代わりに最後にキーを押した時刻を覚えておく方がおそらく簡単です。

var lastescapetime= null;

document.onkeyup= function(event) {
    if (event===undefined) event= window.event;
    if (event.keyCode===27) {
        var now= new Date().getTime();
        if (lastescapetime!==null && now<lastescapetime+1000) {
            alert('You double-escaped!');
            lastescapetime= null;
        } else {
            lastescapetime= now;
        }
    } else {
        lastescapetime= null;
    }
};
于 2010-01-22T01:29:20.133 に答える