2012-04-27 16 views
1

たとえば、2つのキーを使用する必要があり、キーごとに押された時間が累積されます。たとえば、LEFTキーとRIGHTキーのいずれかをクリックするたびにそれらはそれが押された時間を累積します。同じキーをもう一度押すと、時間が追加され、最後に各キーの合計時間が押されます。キーボードでキーが押されている時間を計算する

どうすればいいですか?

+1

?この種の質問には、使用する言語や環境についての説明はありません。 – DangerMonkey

答えて

2

プラットフォームにかなり依存します。しかし、イベントドリブンプラットフォームは、キーダウンやキーアップをイベント(大部分は.net、java、Windowsなど)として扱うと、やや簡単です。

キーダウンイベントを聞き、発生した時刻を記録します。その同じキーのキーアップイベントを取得したときに、記録した時刻から発生した時間を差し引くだけです。 2つの違いは、そのキー押しの持続時間です。

キャッチは、プラットフォームがキーリピートを処理する方法によって、キーアップを取得する前に同じキーに対して複数のキーダウンを取得することがあります。各キーの最初のキー(または最後のキーアップ以降、もちろん)を追跡してください。また、一度に複数のキーを押すことができるので、これを正しく実行するには、複数のキーのキーダウン時間を覚えることができます。

合計時間を記録したい場合は、キーアップで見つかった時間差をとり、そのキーの合計に追加します。 JSで

:どのような言語で

(function() { 
    var output = document.getElementById('output'), 
     totalTime = {}, 
     pressed = {}; 

    window.onkeydown = function(e) { 
     if (e.which in pressed) return; 
     pressed[e.which] = e.timeStamp; 
    }; 

    window.onkeyup = function(e) { 
     if (!(e.which in pressed)) return; 
     var duration = (e.timeStamp - pressed[e.which])/1000; 
     if (!(e.which in totalTime)) totalTime[e.which] = 0; 
     totalTime[e.which] += duration; 
     output.innerHTML += 
      '<p>Key ' + e.which + ' was pressed for ' + 
      duration + ' seconds this time' + 
      '(' + totalTime[e.which] + ' total)</p>'; 
     delete pressed[e.which]; 
    }; 
})(); 
+0

こんにちは、あなたの答えをありがとう、私はこのウェブサイトで見つけた唯一のものですので、これを見ていただけますか?それでは、私は各キーの累積合計時間を取得したいのと同じコンセプトでなければなりません同じキーを押したときに時間が累積するのを確認する必要があります。たとえば、キー37は、押された時間の合計時間を表示します。助けてくださいhttp://jsfiddle.net/EeXVX/ – Nina

+1

ちょうど '期間'を取って、そのキーのための稼働している合計に追加してください。 'totalTime [e.which] + = duration;'と同様です。 – cHao

+0

あなたは私のためにそれをコピーして貼り付けてください、非常に感謝してくださいvar output = document.getElementById( 'output')、 pressed = {}; window.onkeydown = function(e){ if(押された[e.which])return; が押された[e.which] = e.timeStamp; }; window.onkeyup = function(e){ if(!pressed [e.which])return; var duration =(e.timeStamp - pressed [e.which])/ 1000; output.innerHTML + = '

+' + e.which + 'は+ duration +'秒の間に押された

'; が押された[e.which] = 0; }; – Nina

関連する問題