js如何判断扫码枪的输入?

扫码枪输入的时间间隔一般在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 = "";
                }
            } 
        }
阅读 12.8k
1 个回答

不需要记录 lastCode 啊,只需要在时间超出范围的时候重置 lastTimecode 就行了。如果码枪会输入回车,那就在 keyCode === 13 的时候使用 code 就行。这时候如果 code 的值多于1个字符就一定是码枪输入的,没有值就是手工输入的……如果需要记录手工输入的值,可以使用另一个变量比如 manualCode 来记录,在回车的时候如果 code 无值就从 manualCode 中截取后面若干字符出来,再适时把 manualCode 清空就好。

示意(只有判断时间和拼接 code):

let start = new Date();
let code = "";
$("#test").on("keydown", (e) => {
    now = new Date();
  if (now - start > 50) {
      start = now;
    code = String.fromCharCode(e.keyCode);
  } else {
      code += String.fromCharCode(e.keyCode);
    console.log(code);
  }
});
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题