2012-04-20 5 views
2

각 키 입력 사이의 시간을 기록하고 싶습니다 ('A'키로 시작). 밀리 초 단위로 입력하십시오. 사용자가 자신의 일을 마친 후에는 각 키 획 사이의 시간을 제출하고 체크 아웃 할 수 있습니다. 같은자바 스크립트 레코드 키 입력 시간

1 : 500 2 : 300 3 : 400 4 : 500 5 : 50 7 : 50 8 : 100 6 25 I이 자바 스크립트 가능 판단

인 그것?

+1

얼마나 정확한 타이밍이 필요합니까? http://ejohn.org/blog/accuracy-of-javascript-time/ – Brad

+0

약 5 밀리 초. 개인 용도로만 사용할 수 있으므로 모든 종류의 브라우저를 지원할 필요는 없습니다. –

+1

[무엇을 시도해 봤습니까?] (http://whathaveyoutried.com) – veeTrain

답변

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 루프는 최대 (i 항상 엄격하게 적은 times.length - 1보다가 있기 때문에) 정도의 범위를 벗어난 것으로 times[i+1]에 대한 아무런 문제가 없다 times.length - 2에 간다 배열 4-i 설정하는 종료 조건을 유발하기 때문에,

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 

이어서 루프가 종료 : 다섯 개 개의 키 입력을 수행하고 예를 들어, 따라서 (0에서 4 연동) 다섯 개 요소와 times 배열을

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

따라서 i은 최대 색인보다 1 개 작기 때문에 times[i+1]은 항상 유효하게 색인 된 요소입니다.

+0

감사합니다. 마지막으로 추가 된 값만이 존재하지 않으므로 다음 값으로 대체 할 수 없습니다. –

+0

스크립트는 i가 times.length - 1보다 작은 동안 만 실행됩니다. 즉, 마지막 i 인덱스는 길이 - 2이므로 항상 다음 값이 있습니다. – apsillers

+0

5 개의 프레스에 대해 네 개의 레코드 만 보는 것에 대해 이전에 의견을 게시했습니다. 예상되는 결과입니다. * 5 개의 프레스는 * 사이에 * 4 개의 시간 간격을 만듭니다. – apsillers