扫码枪输入的时间间隔一般在8毫秒,偶尔会有16毫秒,而键盘输入一般都在80毫秒以上,因此我设定当输入间隔小于等于30毫秒时,判断为扫码枪输入,但是这段代码会丢失扫码枪扫描的第一个字符,如何判断第一个字符是扫码枪输入还是手动输入的?
window.onload = function(e){
var code = "";
var lastTime,nextTime;
var lastCode,nextCode;
document.onkeypress = function(e) {
nextCode = e.which;
nextTime = new Date().getTime();
if(lastCode == null && lastTime == null) {
// 此处应该怎么判断
}
if(lastCode != null && lastTime != null && nextTime - lastTime <= 30) {
code += String.fromCharCode(nextCode);
} else if(lastCode != null && lastTime != null && nextTime - lastTime > 100){
code = "";
}
lastCode = nextCode;
lastTime = nextTime;
}
this.onkeypress = function(e){
if(e.which == 13){
console.log(code);
code = "";
}
}
}
不需要记录
lastCode
啊,只需要在时间超出范围的时候重置lastTime
和code
就行了。如果码枪会输入回车,那就在keyCode === 13
的时候使用code
就行。这时候如果code
的值多于1个字符就一定是码枪输入的,没有值就是手工输入的……如果需要记录手工输入的值,可以使用另一个变量比如manualCode
来记录,在回车的时候如果code
无值就从manualCode
中截取后面若干字符出来,再适时把manualCode
清空就好。示意(只有判断时间和拼接 code):