我想以毫秒为单位记录每次击键之间的时间(只有一个键开始,'A'键)。用户完成他的事情后,他可以提交并检查每次击键之间的时间。像:
1:500 2:300 3:400 4:500 5:100 6:50 7:50 8:25
我相信这可以通过 Javascript 实现,是吗?
我想以毫秒为单位记录每次击键之间的时间(只有一个键开始,'A'键)。用户完成他的事情后,他可以提交并检查每次击键之间的时间。像:
1:500 2:300 3:400 4:500 5:100 6:50 7:50 8:25
我相信这可以通过 Javascript 实现,是吗?
当然:
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
to索引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
最多比最大索引小一。