2

各キーストローク間の時間をミリ秒単位で記録したいと思います(最初は1つのキー、「A」キー)。ユーザーは自分の作業を終えた後、各キーストローク間のタイミングを送信して確認できます。好き:

1:500 2:300 3:400 4:500 5:100 6:50 7:50 8:25

これはJavascriptで可能だと思いますよね?

4

1 に答える 1

2

もちろん:

var times = [];

// add an object with keycode and timestamp
$(document).keyup(function(evt) {
    times.push({"timestamp":evt.timeStamp,
                "keycode":evt.which})
});

// call this to get the string
function reportTimes() {
    var reportString = "";
    for(var i = 0; i < times.length - 1; ++i) {
         reportString += (i+1) + ": " + (times[i+1].timestamp - times[i].timestamp) + " ";
    }
    return reportString; // add this somewhere or alert it
}

後で必要になった場合に備えて、キーコードを追加しました。正確な問題の説明には必要ありません。


コメントの議論からの明確化:

forループは ( は常に厳密に 未満であるため) までしか進まないtimes.length - 2ためi、配列の範囲外であってtimes.length - 1も問題はありません。times[i+1]たとえば、キーを 5 回押して、 5 つの要素 ( からまでtimesのインデックス) を持つ配列がある場合:04

1st pass: times[1].timestamp - times[0].timestamp
2nd pass: times[2].timestamp - times[1].timestamp
3rd pass: times[3].timestamp - times[2].timestamp
4th pass: times[4].timestamp - times[3].timestamp

iに設定する4と終了条件がトリガーされるため、ループは終了します。

= i < times.length - 1
= 4 < 5 - 1
= 4 < 4
= false  [i cannot be set to 4 by this loop]

したがって、times[i+1]は常に有効にインデックス付けされた要素です。これiは、 が最大インデックスより多くても 1 つ小さいためです。

于 2012-04-20T16:06:19.810 に答える