在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

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

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 = "";
                }
            } 
        }
回答
編輯回答
筱饞貓

不需要記錄 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);
  }
});
2017年9月29日 12:25