Sure:
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]
быть вне границ массив. Например, если вы делаете пять нажатий клавиш, и, следовательно, имеют times
массив с пятью элементами (индексируются от 0
до 4
):
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
не более чем на один меньше максимального индекса.
Насколько точны сроки? http://ejohn.org/blog/accuracy-of-javascript-time/ – Brad
Около 5 миллисекунд. Это просто для личного использования, поэтому мне не нужно поддерживать все виды браузеров. –
[Что вы пробовали?] (Http://whathaveyoutried.com) – veeTrain