2012-04-20 3 views
2

Я хочу записать время между каждым нажатием клавиши (всего один ключ для начала, клавиша «А») в millseconds. После того, как пользователь закончит свою работу, он может отправить и проверить тайминги между каждым нажатием клавиши. Как:Javascript запись тайм-аута нажатия клавиш

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

Я считаю, что это возможно с помощью Javascript, является Это?

+1

Насколько точны сроки? http://ejohn.org/blog/accuracy-of-javascript-time/ – Brad

+0

Около 5 миллисекунд. Это просто для личного использования, поэтому мне не нужно поддерживать все виды браузеров. –

+1

[Что вы пробовали?] (Http://whathaveyoutried.com) – veeTrain

ответ

2

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 - 2i всегда строго меньше 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 не более чем на один меньше максимального индекса.

+0

Спасибо. Только последнее добавленное значение не может вычесть следующее значение, поскольку оно не возбуждает. –

+0

Скрипт работает только в то время, когда i меньше, чем times.length - 1, т. Е. Последний индекс i - длина - 2, поэтому всегда есть следующее значение. – apsillers

+0

Вы отправили комментарий ранее о том, что видели только четыре записи для пяти нажатий: это ожидаемый результат. * Пять * прессов производят * четыре * временных интервала * между * их. – apsillers

Смежные вопросы