0

入力中にキーが押された時間を確認しようとしています。ここ機能が遅く入力すると機能が実行されます

は私のjavascriptです:

var keyDownTimer = 0; 
var keyUpTimer = 0; 
var keyPressedCounter = 0; 
var dt; 
var keyDownDisplay = document.getElementById("keyDownTimer"); 
var keyPressedDisplay = document.getElementById("keyPressed"); 
keyDownDisplay.innerHTML = keyDownTimer; 
keyPressedDisplay.innerHTML = keyPressedCounter; 
function keypressed(){ 
keyPressedCounter++; 
    keyPressedDisplay.innerHTML = keyPressedCounter; 
} 
function keydown(){ 
    dt = setInterval(addDownTime, 1); 
} 
function addDownTime(){ 
    keyDownTimer++; 
    keyDownDisplay.innerHTML = keyDownTimer/1000; 
} 
function keyup(){ 
    clearInterval(dt); 
} 

と私のhtml

<style> 
     div{ 
     height:25px; 
     width:100px; 
     display:inline-block; 
     margin-right:10px; 
     } 
    </style> 
</head> 
<body> 
<div id="keyUpTimer"></div><div id="keyDownTimer"></div><div id="keyPressed"></div> 
<input id="textBox" type="text" onkeyup="keyup()" onkeydown="keydown()" onkeypress="keypressed()"> 

私は、テキストボックスに入力していて、すべてが正常に動作しますが、その後、何らかの理由で、keyDownTimerはちょうどに開始しますあたかもkeydown()が動かないかのように走ります。 私のコードは読みにくいですが、私はそのコードが正しいと確信しています。適切に動作することを確認してください。ゆっくりとタイプすると少し問題が解決するようですが、それでも無限に走ってしまいます。 ご協力いただければ幸いです。それが何をしているのかを説明できるなら、それはすばらしいことでしょう。

+0

をし、その後、両方を解放し、Bを押してください?これは速く入力するときに頻繁に起こることです...(この場合、dtに何が起こるか考えてください!) – psmears

答えて

0

多くの間隔を参照するdt変数を置き換えます。

複数のキーを同時に押すと、最初のキーダウンのdtが2番目のキーに置き換えられます。

このお試しください:Aを押す(ホールド)とどう

var dt = 0; 
... 
function keydown(){ 
    if(dt == 0){ 
    dt = setInterval(addDownTime, 1); 
    } 
} 
function addDownTime(){ 
    keyDownTimer++; 
    keyDownDisplay.innerHTML = keyDownTimer/1000; 
} 
function keyup(){ 
    clearInterval(dt); 
    dt = 0; 
} 
関連する問題