2009-08-03 22 views
9

Chciałbym mieć możliwość uwięzienia podwójnego naciśnięcia klawisza (np. Dla Char T) w celu wykonania specjalnego przetwarzania. Chciałbym, aby naciśnięcia klawiszy były wystarczająco szybkie, aby nie były interpretowane jako dwa oddzielne naciśnięcia, tylko jak podwójne kliknięcie. Jakieś pomysły, jak mogę to osiągnąć?Jak pułapkę naciśnij dwukrotnie klawisz w javascript?

Odpowiedz

16

Po naciśnięciu przycisku (-ów) zanotuj godzinę. Następnie porównaj go z czasem, w którym zanotowano, że klucz (i) zostały uderzone.

Jeśli różnica mieści się w Twoim progu, możesz uznać ją za podwójną. W przeciwnym razie nie rób tego. Szorstki przykład:

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

Ten roztwór używa Ctrl. Nie mówi, że tego potrzebuje (chociaż ma to dla mnie sens). –

+0

** @ Josh Stodola: ** HA! Pokazuje, jak uważnie czytam ... Widzisz "Char T", przeczytaj "Ctrl T" ... oops! – Shog9

+0

działa świetnie dzięki! – ak3nat0n

10

miał zmienny (może first_press), który ustawiony na true, gdy zdarzenie przyciśnięcie dzieje i zacząć timer, który będzie zresetować zmienną false po upływie określonego czasu (jednak szybko chcesz im nacisnąć klawisze).

W swoim zdarzeniu keypress, jeśli ta zmienna jest prawdziwa, masz podwójne naciśnięcie.

przykład:

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

I można ustawić "pół-sekundę" konfigurowalną wartość stałą, którą użytkownicy mogą zmienić. Zasady użyteczności! – montrealist

+0

-1 Działa to dla * każdego * naciśniętego klawisza. –

+0

Nie próbowałem dostarczyć mu rozwiązania typu "drop-in". Po prostu pokazując mu ogólny pomysł. –

Powiązane problemy