條碼掃描器其實就是一種輸入設備,跟鍵盤一樣。在控制台打印掃描過程,可以看出,掃描過程就像是在鍵盤上敲擊相應的鍵,keycode和鍵盤是一一對應的,只是輸入速度(間隔時間)比物理鍵盤輸入要快得多。我們可以通過監聽輸入間隔時間,來判斷到底是鍵盤輸入還是掃描輸入。
掃碼槍輸入的時間間隔一般在10毫秒以內,物理鍵盤輸入要遠大於這個數值,通常為80毫秒以上。因此,當輸入間隔時間小於30毫秒時,判斷為掃碼槍輸入,其余情況判斷為鍵盤輸入。
let lastTime = null;
let nextTime = null;
let code = '';
document.onkeydown = function (e) {
let keycode = e.keyCode || e.which || e.charCode;
nextTime = new Date();
if (keycode === 13) {
if (lastTime && (nextTime - lastTime < 30)) {
// 掃碼槍
// do something
} else {
// 鍵盤
// do something
}
code = '';
lastTime = null;
e.preventDefault();
} else {
if (!lastTime) {
code = String.fromCharCode(keycode);
} else {
if (nextTime - lastTime < 30) {
code += String.fromCharCode(keycode);
} else {
code = '';
}
}
lastTime = nextTime;
}
};
轉載:https://www.jianshu.com/p/3019858e3cad