2017-03-23 46 views
2

目標:爲按鍵動態收集數據(停留時間,飛行時間,從下到下的時間...)。如果快速鍵入,鍵盤停留/保持時間不正確

完成的事情:成功獲得兩次擊鍵之間的飛行時間。

問題:當我輸入快速時,我能夠正確地獲得飛行時間,但停留時間混亂起來。

最小的,完整的和可覈查的例子https://jsfiddle.net/nirajpandkar/600orotn/

例如用於再現錯誤,你可以嘗試在同一時間鍵入單詞「the」慢慢地,一個字。停留時間如下 -

Pressed key 84 for 0.107 

Pressed key 72 for 0.091 

Pressed key 69 for 0.091 

現在嘗試在單詞鍵入字母「T」和「h」「的」快,你可以(你會不會去努力)。停留時間 -

Pressed key 84 for 0.008 

Pressed key 72 for 1490285526.868 

Pressed key 69 for 0.074 

問題:爲什麼會出現這種情況和應該怎樣解決?

回答

1

的原因錯誤是快速打字時,它可以爲​​到以前keyup之前進行發射。因此dwellTime可能未被重置。

爲了減輕您可以在dwellTime存儲在每個鍵代碼基礎的問題,使其夫婦​​與keyup對於給定的鍵,這樣的事情:

var dwellTimes = {}; 
 
$('#inputbox').keydown(function(e) { 
 
    if (!dwellTimes[e.which]) 
 
    dwellTimes[e.which] = new Date().getTime(); 
 
}); 
 

 
$('#inputbox').keyup(function(e) { 
 
    var dwellTime = new Date().getTime() - dwellTimes[e.which]; 
 
    delete dwellTimes[e.which]; 
 

 
    $('#output').prepend("<p>Pressed key " + e.which + " for " + dwellTime/1000 + "</p>"); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input id="inputbox" type='text'> 
 
<div id="output"></div>

請注意,在此示例中我使用了prepend(),因此您不必向下滾動查看新引發的事件。另外,我改變了邏輯,所以如果一個鍵被按下,就像你以前的邏輯沒有那樣。如果您不需要這種行爲,您可以簡單地從​​事件處理程序中刪除if條件。

+0

啊,解釋它!欣賞敏捷:)謝謝! –