js 获取扫码枪输入数据的方法


Posted in Javascript onJune 10, 2020

1、扫码枪相当于键盘输入设备,输入一连串数字后加一个enter键。但在实际开发中需要区分是扫描枪输入还是键盘用户输入,区别在于扫码枪输入很快。

let code = '';
   let lastTime, nextTime;
   let lastCode, nextCode;
   window.document.onkeypress = (e) => {
    if (window.event) { // IE
     nextCode = e.keyCode;
    } else if (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 = new Date().getTime();
    if (!lastTime && !lastCode) {
     code += e.key;
    }

    if (lastCode && lastTime && nextTime - lastTime > 30) { // 当扫码前有keypress事件时,防止首字缺失
     code = e.key;
    } else if (lastCode && lastTime) {
     code += e.key;
    }
    lastCode = nextCode;
    lastTime = nextTime;
   }

PS:下面看下js获取USB扫码枪数据的代码

前言

找了很多相关的教程不太好用,汲取各家之长总结精简了一下

原理

  1. 扫码枪扫描到的条形码每一位会触发一次onkeydown事件
  2. 比如扫描条码位‘1234567890'的条形码,会连续执行10次onkeydown事件
  3. 条码扫描到最后一位,会直接触发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
    } else if (e.which) {// Netscape/Firefox/Opera
      nextCode = e.which
    }
    nextTime = new Date().getTime();
    //字母上方 数字键0-9 对应键码值 48-57; 数字键盘 数字键0-9 对应键码值 96-105
    if((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 = new Date().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);
      } else if (code.length == 23) {
				this.$message('B类条码:' + code);
      } else if (code.length == 0) {
				this.$message('请输入条码');
      } else{
      	this.$message('条码不合法:' + code);
      }
      //键入回车务必清空code值
    	this.code = ''
    	return false;
    }
  }
}

总结

到此这篇关于js 获取扫码枪输入数据的文章就介绍到这了,更多相关js 获取扫码枪输入数据内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
目前流行的JavaScript库的介绍及对比
Sep 29 Javascript
js传参数受特殊字符影响错误的解决方法
Oct 21 Javascript
js简单实现表单中点击按钮动态增加输入框数量的方法
Aug 18 Javascript
Jquery-1.9.1源码分析系列(十一)之DOM操作
Nov 25 Javascript
jQuery实现的AJAX简单弹出层效果代码
Nov 26 Javascript
跨域资源共享 CORS 详解
Apr 26 Javascript
Actionscript与javascript交互实例程序(修改)
Sep 22 Javascript
js实现登录框鼠标拖拽效果
Mar 09 Javascript
JQuery实现定时刷新功能代码
May 09 jQuery
JavaScript使用递归和循环实现阶乘的实例代码
Aug 28 Javascript
JS实现可针对算术表达式求值的计算器功能示例
Sep 04 Javascript
用webAPI实现图片放大镜效果
Nov 23 Javascript
使用Vue Composition API写出清晰、可扩展的表单实现
Jun 10 #Javascript
使用 UniApp 实现小程序的微信登录功能
Jun 09 #Javascript
详解vue高级特性
Jun 09 #Javascript
vue实例的选项总结
Jun 09 #Javascript
微信小程序中的列表切换功能实例代码详解
Jun 09 #Javascript
vue项目或网页上实现文字转换成语音播放功能
Jun 09 #Javascript
浅谈vue的第一个commit分析
Jun 08 #Javascript
You might like
9条PHP编程小知识及易犯的小错误
2015/01/22 PHP
JSON两种结构之对象和数组的理解
2016/07/19 PHP
Yii框架连接mongodb数据库的代码
2016/07/27 PHP
常见效果实现之返回顶部(结合淡入、淡出、减速滚动)
2012/01/04 Javascript
javascript(js)的小数点乘法除法问题详解
2014/03/07 Javascript
window.print打印指定div指定网页指定区域的方法
2014/08/04 Javascript
javascript设计模式之对象工厂函数与构造函数详解
2015/07/30 Javascript
基于jQuery实现的查看全文功能【实用】
2016/12/11 Javascript
AngularJS解决ng-if中的ng-model值无效的问题
2017/06/21 Javascript
JS获取一个表单字段中多条数据并转化为json格式
2017/10/17 Javascript
vue cli使用绝对路径引用图片问题的解决
2017/12/06 Javascript
微信小程序实现animation动画
2018/01/26 Javascript
JavaScript函数式编程(Functional Programming)高阶函数(Higher order functions)用法分析
2019/05/22 Javascript
基于Node的Axure文件在线预览的实现代码
2019/08/28 Javascript
[01:09:24]Ti4开幕式
2014/07/19 DOTA
Python删除空文件和空文件夹的方法
2015/07/14 Python
Python在图片中插入大量文字并且自动换行
2019/01/02 Python
Python关于excel和shp的使用在matplotlib
2019/01/03 Python
python3 json数据格式的转换(dumps/loads的使用、dict to str/str to dict、json字符串/字典的相互转换)
2019/04/01 Python
python turtle库画一个方格和圆实例
2019/06/27 Python
python单向循环链表原理与实现方法示例
2019/12/03 Python
pytorch dataloader 取batch_size时候出现bug的解决方式
2020/02/20 Python
django-orm F对象的使用 按照两个字段的和,乘积排序实例
2020/05/18 Python
浅析CSS3 中的 transition,transform,translate之间区别和作用
2020/03/26 HTML / CSS
美国宠物商店:Wag.com
2016/10/25 全球购物
Gtech官方网站:地毯清洁器、吸尘器及园艺设备
2018/05/23 全球购物
马来西亚最大的在线隐形眼镜商店:MrLens
2019/03/27 全球购物
《称象》教学反思
2014/04/25 职场文书
教师个人考察材料
2014/12/16 职场文书
经费申请报告
2015/05/15 职场文书
唐山大地震的观后感
2015/06/05 职场文书
奔腾年代观后感
2015/06/09 职场文书
篮球赛新闻稿
2015/07/17 职场文书
公证书
2019/04/17 职场文书
jQuery实现广告显示和隐藏动画
2021/07/04 jQuery
Jedis操作Redis实现模拟验证码发送功能
2021/09/25 Redis