2017-12-01 4 views
-1

ユーザーがUP矢印を5回クリックできるように、別々のstartTimeとendTimeが記録されるたびに必要です。したがって、コンソールは返答の速さを返します(msResponse)。私のforループは入力に対して一度だけプロンプトを出すのはなぜですか?

for (var i = 0; i < 5; i++) { 
     var startTime = new Date().getTime(); 
     document.addEventListener("keydown", function touch(e) { 
      switch (e.keyCode) { 
       case 38: 
        var endTime = new Date().getTime(); 
        var msResponse = endTime - startTime; 
        console.log(msResponse); 
        document.removeEventListener("keydown", touch); 
        break; 
      } 
     })}; 

私はループがUP矢印をクリックして私に5回を促すメッセージが表示されますことを期待しています。新しいstartTimeとendTimeを設定するたびに。

ただし、UP矢印を最初にクリックすると5回ループし、msResponseは各ループの繰り返しで少しずつ増加します。

誰かがこれを少し理解するのを助けることができたら、それはすばらしいでしょう!

多くの感謝!

+2

'addEventListener'はプロンプトではありません。キーが押されるたびに実行される関数を追加し、スクリプトの実行を待機している間はスクリプトを一時停止しません。 1つのリスナーを追加し、5回押した後にリスナーを削除するだけです。 – Ryan

答えて

0

forループは、繰り返しと新しい変数の作成用です。私は倍の配列を作成します

var startTime = new Date().getTime(); 
    document.addEventListener("keydown", function touch(e) { 
     switch (e.keyCode) { 
      case 38: 
       var endTime = new Date().getTime(); 
       var msResponse = endTime - startTime; 
       console.log(msResponse); 
       document.removeEventListener("keydown", touch); 
       break; 
     } 
    })}; 

/*Main problem you mentioned in your question was that time is only increasing ever so slightly. You are reassigning startTime = new Date() in your second iteration.*/ 


var startTime = new Date().getTime(); 
    document.addEventListener("keydown", function touch(e) { 
     switch (e.keyCode) { 
      case 38: 
       var endTime = new Date().getTime(); 
       var msResponse = endTime - startTime; 
       console.log(msResponse); 
       document.removeEventListener("keydown", touch); 
       break; 
     } 
    })}; 

キーを押すと、アレイが到達したときにキーバインドを解除されるたびにログに記録:ループがあなたのコードを繰り返すことが以外に使用されていないため、あなた、それはこのように見える終わるので、 .length = x。

var startTime = new Date().getTime(); 
var endTime = [startTime]; 


window.addEventListener("keydown", function touch(e) { 
    if(endTime[5] !== undefined){ 
    window.removeEventListener('keydown', touch()); 
    }else if (e.keyCode === 38){ 
    var msResponses = new Date().getTime(); 
    endTime.push(msResponses); 
    } 
}); 

このコードは、時間に基づいた数字の配列を作成し、あなたは、関数が初回と第2のプレスの間の差を取得するために呼び出さまたは互いにれてからの時間を取得するために、最初からそれらを引くことができ、第二第3にまたは何でも。

関連する問題