鍍金池/ 問答/HTML/ js如何判斷掃碼槍的輸入?

js如何判斷掃碼槍的輸入?

掃碼槍輸入的時(shí)間間隔一般在8毫秒,偶爾會(huì)有16毫秒,而鍵盤輸入一般都在80毫秒以上,因此我設(shè)定當(dāng)輸入間隔小于等于30毫秒時(shí),判斷為掃碼槍輸入,但是這段代碼會(huì)丟失掃碼槍掃描的第一個(gè)字符,如何判斷第一個(gè)字符是掃碼槍輸入還是手動(dòng)輸入的?

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) {
                    // 此處應(yīng)該怎么判斷
                } 
                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 啊,只需要在時(shí)間超出范圍的時(shí)候重置 lastTimecode 就行了。如果碼槍會(huì)輸入回車,那就在 keyCode === 13 的時(shí)候使用 code 就行。這時(shí)候如果 code 的值多于1個(gè)字符就一定是碼槍輸入的,沒有值就是手工輸入的……如果需要記錄手工輸入的值,可以使用另一個(gè)變量比如 manualCode 來(lái)記錄,在回車的時(shí)候如果 code 無(wú)值就從 manualCode 中截取后面若干字符出來(lái),再適時(shí)把 manualCode 清空就好。

示意(只有判斷時(shí)間和拼接 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);
  }
});
2017年9月29日 12:25