思路:監聽頁面上所有的keypress事件,根據掃碼槍錄入的速度跟正常人爲輸入的速度,也就是時間間隔對比。來判斷是不是掃碼槍錄入。問題是判斷第一個輸入的值是人還是掃碼槍。所以在下面處理中,不管人輸入還是掃碼槍,都會記錄第一個值。通過判斷第二個輸入值是不掃碼槍即可。是,就拼接code字符串,不是則清零並將當前值作爲第一個輸入值。
var code = "";
var lastTime,nextTime;
var lastCode,nextCode;
document.onkeypress = function(e) {
nextCode = e.which;
if(e.which === 13){
if(code.length < 2){ //手動輸入的時間不會讓code的長度大於2,所以這裏只會對掃碼槍有效
return
}
lastTime = null;
lastCode = null;
code = '';
return;
}
nextTime = new Date().getTime();
if(!lastTime && !lastCode){
code += e.key;
}
if(lastCode != null && lastTime != null && nextTime - lastTime <= 30) {
code += e.key;
}else if(lastCode != null && lastTime != null && nextTime - lastTime > 500) {//當掃碼前有keypress事件時,防止首字缺失
code = e.key;
}
lastCode = nextCode;
lastTime = nextTime;
};