13

特別な処理を行うために、ダブルキーの押下(たとえば、Char Tの場合)をトラップできるようにしたいです。キーの押下が、2つの別々の押下として解釈されないように、十分に速く発生するようにしたいと思います。ダブルクリック。これをどのように達成できるかについてのアイデアはありますか?

4

3 に答える 3

26

キーが押されたら、時間をメモします。次に、最後にキーが押されたときに記録した時間と比較します。

差がしきい値の範囲内である場合は、それを2倍と見なします。そうでなければ、しないでください。大まかな例:

var delta = 500;
var lastKeypressTime = 0;
function KeyHandler(event)
{
   if ( String.fromCharCode(event.charCode).toUpperCase()) == 'T' )
   {
      var thisKeypressTime = new Date();
      if ( thisKeypressTime - lastKeypressTime <= delta )
      {
        doDoubleKeypress();
        // optional - if we'd rather not detect a triple-press
        // as a second double-press, reset the timestamp
        thisKeypressTime = 0;
      }
      lastKeypressTime = thisKeypressTime;
   }
}
于 2009-08-03T18:08:04.220 に答える
12

キー押下イベントが発生したときにtrueに設定する変数(おそらくfirst_press)を用意し、設定された時間が経過すると変数をfalseにリセットするタイマーを開始します(ただし、キーを押す速度は速くなります)。

キープレスイベントで、その変数がtrueの場合、ダブルプレスがあります。

例:

var first_press = false;
function key_press() {
    if(first_press) {
        // they have already clicked once, we have a double
        do_double_press();
        first_press = false;
    } else {
        // this is their first key press
        first_press = true;

        // if they don't click again in half a second, reset
        window.setTimeout(function() { first_press = false; }, 500);
    }
}
于 2009-08-03T18:08:14.173 に答える
0

答えるには遅すぎることはわかっていますが、これをどのように実装したかを説明します。

let pressed;
let lastPressed;
let isDoublePress;

const handleDoublePresss = key => {
    console.log(key.key, 'pressed two times');
}

const timeOut = () => setTimeout(() => isDoublePress = false, 500);

const keyPress = key => {
    pressed = key.keyCode;

    if (isDoublePress && pressed === lastPressed) {
        isDoublePress = false;
        handleDoublePresss(key);
    } else {
        isDoublePress = true;
        timeOut();
    }

    lastPressed = pressed;
}

window.onkeyup = key => keyPress(key);
于 2019-04-05T12:36:07.883 に答える