2009-08-03 9 views
9

Mi piacerebbe essere in grado di intrappolare la doppia pressione del tasto (per esempio il Char T) per fare qualche elaborazione speciale. Vorrei che la pressione dei tasti avvenisse abbastanza velocemente da non essere interpretata come due presse separate, solo come il doppio clic. Qualche idea su come posso ottenere questo?Come intrappolare la doppia pressione premere in javascript?

risposta

16

Quando si colpisce la/e chiave/i, prendere nota dell'ora. Quindi confrontalo con il momento in cui hai notato lo ultimo tempo in cui sono state colpite le chiavi.

Se la differenza è all'interno della soglia, considerarla doppia. Altrimenti, non farlo. Esempio di massima:

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

Questa soluzione utilizza il tasto Ctrl. Non dice di averne bisogno (sebbene abbia senso per me). –

+0

** @ Josh Stodola: ** HA! Mostra quanto sono attento a leggere ... Ho visto "Char T", leggi "Ctrl T" ... oops! – Shog9

+0

ottimo lavoro grazie! – ak3nat0n

10

avere una variabile (forse first_press) che si imposta su true quando un evento keypress accade, e avviare un timer che consente di resettare la variabile su false dopo un certo lasso di tempo (per quanto velocemente si desidera loro per premere i tasti).

Nell'evento keypress, se la variabile è vera, si ha una doppia pressione.

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

E puoi rendere "mezzo secondo" un valore permanente configurabile che gli utenti possono modificare. Regole di usabilità! – montrealist

+0

-1 Funziona per * ogni * tasto premuto. –

+0

Non stavo cercando di fornire una soluzione drop-in per lui. Mostrandogli solo l'idea generale. –