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 null和undefined区别分析
Oct 14 Javascript
显示js对象所有属性和方法的函数
Oct 16 Javascript
Javascript 类与静态类的实现(续)
Apr 02 Javascript
简单的jquery左侧导航栏和页面选中效果
Aug 21 Javascript
原生js实现电商侧边导航效果
Jan 19 Javascript
jquery实现input框获取焦点的简单实例
Jan 26 Javascript
Javascript中引用类型传递的知识点小结
Mar 06 Javascript
JavaScript实现的搜索及高亮显示功能示例
Aug 14 Javascript
JavaScript设计模式之模板方法模式原理与用法示例
Aug 07 Javascript
vue实现吸顶、锚点和滚动高亮按钮效果
Oct 21 Javascript
Vue使用Element实现增删改查+打包的步骤
Nov 25 Vue.js
利用JavaScript为句子加标题的3种方法示例
Jan 05 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
Http 1.1 Etag 与 Last-Modified提高php效率
2008/01/10 PHP
php实现zip文件解压操作
2015/11/03 PHP
php 获取文件行数的方法总结
2016/10/11 PHP
php+lottery.js实现九宫格抽奖功能
2019/07/21 PHP
laravel框架邮箱认证实现方法详解
2019/11/22 PHP
另类调用flash无须激活的方法
2006/12/27 Javascript
javascript Array.sort() 跨浏览器下需要考虑的问题
2009/12/07 Javascript
Jquery实现无刷新DropDownList联动实现代码
2010/03/08 Javascript
javascript操作cookie的文章(设置,删除cookies)
2010/04/01 Javascript
JQuery实现鼠标滑过显示导航下拉列表
2013/09/12 Javascript
JS实现根据当前文字选择返回被选中的文字
2014/05/21 Javascript
js使用Array.prototype.sort()对数组对象排序的方法
2015/01/28 Javascript
js+css实现导航效果实例
2015/02/10 Javascript
AngularJS基础 ng-list 指令详解及示例代码
2016/08/02 Javascript
浅谈ajax在jquery中的请求和servlet中的响应
2018/01/22 jQuery
vue element table 表格请求后台排序的方法
2018/09/28 Javascript
小程序扫描普通链接二维码跳转小程序指定界面方法
2019/05/07 Javascript
eslint 的三大通用规则详解
2019/05/16 Javascript
nodejs实现用户登录路由功能
2019/05/22 NodeJs
微信小程序一周时间表功能实现
2019/10/17 Javascript
Echarts实现多条折线可拖拽效果
2019/12/19 Javascript
[01:14:55]EG vs Spirit Supermajor 败者组 BO3 第三场 6.4
2018/06/05 DOTA
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
2015/04/16 Python
python通过邮件服务器端口发送邮件的方法
2015/04/30 Python
python实现下载指定网址所有图片的方法
2015/08/08 Python
Python基于回溯法子集树模板解决最佳作业调度问题示例
2017/09/08 Python
python pandas中DataFrame类型数据操作函数的方法
2018/04/08 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
2019/12/12 Python
使用Tensorflow实现可视化中间层和卷积层
2020/01/24 Python
Python 跨.py文件调用自定义函数说明
2020/06/01 Python
中国京东和泰国中央集团合资的网站:JD CENTRAL
2020/08/22 全球购物
淘宝活动策划方案
2014/02/06 职场文书
《夕阳真美》教学反思
2014/04/27 职场文书
党支部班子“四风”问题自我剖析材料
2014/09/28 职场文书
少年派的奇幻漂流观后感
2015/06/08 职场文书
大学学生会竞选稿
2015/11/19 职场文书