js 获取扫码枪输入数据的方法
1、扫码枪相当于键盘输入设备,输入一连串数字后加一个enter键。但在实际开发中需要区分是扫描枪输入还是键盘用户输入,区别在于扫码枪输入很快。
letcode='';
letlastTime,nextTime;
letlastCode,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)=>{
letnextCode,nextTime='';
letlastTime=this.lastTime;
letcode=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-105
if((nextCode>=48&&nextCode<=57)||(nextCode>=96&&nextCode<=105)){
letcodes={'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;
//键入Enter
if(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;
}
}
}
总结
到此这篇关于js获取扫码枪输入数据的文章就介绍到这了,更多相关js获取扫码枪输入数据内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。