How to trap double key press in javascript?

前端 未结 3 1939
甜味超标
甜味超标 2020-12-16 00:48

I would like to be able to trap the double key press (for the Char T for example) in order to do some special processing.I would like the key presses to happen fast enough t

相关标签:
3条回答
  • 2020-12-16 01:44

    I know is too late to answer but here goes how I have implemented that:

    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);
    
    0 讨论(0)
  • 2020-12-16 01:45

    Have a variable (perhaps first_press) that you set to true when a keypress event happens, and start a timer that will reset the variable to false after a set amount of time (however fast you want them to press the keys).

    In your keypress event, if that variable is true then you have a double press.

    Example:

    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);
        }
    }
    
    0 讨论(0)
  • 2020-12-16 01:50

    When the key(s) are hit, make a note of the time. Then compare it with the time you noted the last time they key(s) were hit.

    If the difference is within your threshold, consider it a double. Otherwise, don't. Rough example:

    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;
       }
    }
    
    0 讨论(0)
提交回复
热议问题