2009-08-03 6 views
9

いくつかの特別な処理を行うために、ダブルキープレス(たとえばChar Tの場合)をトラップできるようにしたいと考えています。キープレスは、2つの別個のプレスとして解釈されないように十分速くダブルクリックのように。 どのように私はこれを達成することができますか?javascriptでダブルキープレスをトラップする方法は?

答えて

16

キーがヒットしたら、時間をメモしてください。その後、あなたがキーがヒットした時にと最後にと書いた時間と比較してください。

差がしきい値内にある場合は、それを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; 
    } 
} 
+0

このソリューションは、Ctrlキーを使用しています。彼は彼がそれを必要としているとは言わない(私には意味があるが)。 –

+0

** @ Josh Stodola:** HA!どのように私が読んで慎重に表示... "チャーT"を見た、 "Ctrl T"を読む...おっと! – Shog9

+0

ありがとうございました! – ak3nat0n

10

がキープレスイベントが発生したときにtrueに設定し、変数(おそらくfirst_press)を持っており、設定時間後にfalseに変数をリセットしますタイマーを起動し(ただし、高速あなたが欲しいですキーを押す)。

あなたのkeypressイベントでは、その変数が真であれば、ダブル・プレスがあります。

例:

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

そして、ユーザーが変更できる設定可能な永続的な値として「半秒」を設定することができます。ユーザビリティのルール! – montrealist

+0

-1これは*押された*キーごとに機能します。 –

+0

私は彼のためのドロップインソリューションを提供しようとしていませんでした。彼に一般的な考えを示すだけです。 –

関連する問題