1、扫码枪相当于键盘输入设备,输入一连串数字后加一个enter键。但在实际开发中需要区分是扫描枪输入还是键盘用户输入,区别在于扫码枪输入很快。
复制 let code =;
let lastTime, nextTime;
let lastCode, nextCode;
window.document.onkeypress =(e)=>{if(window.event){// IE
nextCode = e.keyCode;}elseif(e.which){// Netscape/Firefox/Opera
nextCode = e.which;}if(nextCode ===13){if(code.length <3)return;// 手动输入的时间不会让code的长度大于2,所以这里只会对扫码枪有
console.log(code);// 获取到扫码枪输入的内容,做别的操作
code =;
lastCode =;
lastTime =;return;}
nextTime =newDate().getTime();if(!lastTime &&!lastCode){
code = e.key;}if(lastCode && lastTime && nextTime - lastTime >30){// 当扫码前有keypress事件时,防止首字缺失
code = e.key;}elseif(lastCode && lastTime){
code = e.key;}
lastCode = nextCode;
lastTime = nextTime;}
PS:下面看下js获取USB扫码枪数据的代码
前言
找了很多相关的教程不太好用,汲取各家之长总结精简了一下
原理
扫码枪扫描到的条形码每一位会触发一次onkeydown事件比如扫描条码位‘1234567890的条形码,会连续执行10次onkeydown事件条码扫描到最后一位,会直接触发Enter
需要引入jQuery,我这里用的是vue
复制window.onload =(e)=>{
document.onkeydown =(e)=>{
let nextCode,nextTime =;
let lastTime =this.lastTime;
let code =this.code;if(window.event){// IE
nextCode = e.keyCode
}elseif(e.which){// Netscape/Firefox/Opera
nextCode = e.which
}
nextTime =newDate().getTime();//字母上方 数字键0-9 对应键码值 48-57; 数字键盘 数字键0-9 对应键码值 96-105if((nextCode>=48&&nextCode<=57)||(nextCode>=96&&nextCode<=105)){
let codes ={48:48,49:49,50:50,51:51,52:52,53:53,54:54,55:55,56:56,57:57,96:48,97:49,98:50,99:51,100:52,101:53,102:54,103:55,104:56,105:57};
nextCode = codes[nextCode];
nextTime =newDate().getTime();}// 第二次输入延迟两秒,删除之前的数据重新计算if(nextTime && lastTime && nextTime-lastTime>2000){
code =String.fromCharCode(nextCode);}else{
code =String.fromCharCode(nextCode)}// 保存数据this.nextCode = nextCode;this.lastTime = nextTime;this.code = code;// 键入Enterif(e.which ==13){// 判断 code 长度(这里就获取到条码值了,以下业务自由发挥)
code = $.trim(code)if(code.length ==13){this.$message(A类条码: code);}elseif(code.length ==23){this.$message(B类条码: code);}elseif(code.length ==0){this.$message(请输入条码);}else{this.$message(条码不合法: code);}//键入回车务必清空code值this.code =returnfalse;}}}
相关学习推荐:javascript视频教程