Domanda

Vorrei essere in grado di intercettare la pressione del doppio tasto (ad esempio per il Char T) al fine di eseguire alcune elaborazioni speciali. Vorrei che le pressioni dei tasti avvenissero abbastanza velocemente da non essere interpretate come due pressioni separate, proprio come il doppio clic. Qualche idea su come posso raggiungere questo obiettivo?

È stato utile?

Soluzione

Quando vengono premuti i tasti, prendere nota del tempo. Quindi confrontalo con il momento in cui hai notato l ' ultima volta in cui sono state premute le chiavi.

Se la differenza è entro la soglia, considerala doppia. Altrimenti no. Esempio approssimativo:

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

Altri suggerimenti

Avere una variabile (forse first_press ) che hai impostato su true quando si verifica un evento keypress e avvia un timer che reimposterà la variabile su false dopo un determinato periodo di tempo (per quanto veloce desideri per premere i tasti).

Nel tuo evento keypress, se quella variabile è vera, devi premere due volte.

Esempio:

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

So che è troppo tardi per rispondere, ma ecco come l'ho implementato:

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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top