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 相关文章推荐
JS location几个方法小姐
Jul 09 Javascript
基于JavaScript实现继承机制之构造函数+原型链混合方式的使用详解
May 07 Javascript
js获取IFRAME当前的URL的方法
Nov 13 Javascript
什么是 AngularJS?AngularJS简介
Dec 06 Javascript
jQuery控制div实现随滚动条滚动效果
Jun 07 Javascript
JS随机打乱数组的方法小结
Jun 22 Javascript
Bootstrap3下拉菜单的实现
Feb 22 Javascript
JavaScript基本类型值-Number类型
Feb 24 Javascript
一步步教你利用Canvas对图片进行处理
Sep 19 Javascript
angularjs中判断ng-repeat是否迭代完的实例
Sep 12 Javascript
javascript中的offsetWidth、clientWidth、innerWidth及相关属性方法
May 14 Javascript
vue+elementUI实现简单日历功能
Sep 24 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
destoon实现VIP排名一直在前面排序的方法
2014/08/21 PHP
学习php设计模式 php实现装饰器模式(decorator)
2015/12/07 PHP
编写PHP脚本使WordPress的主题支持Widget侧边栏
2015/12/14 PHP
php通过淘宝API查询IP地址归属等信息
2015/12/25 PHP
常用参考资料(手册)下载或者链接
2006/07/22 Javascript
用js自动判断浏览器分辨率的代码
2007/01/28 Javascript
js 调整select 位置的函数
2008/02/21 Javascript
functional继承模式 摘自javascript:the good parts
2011/06/20 Javascript
js select option对象小结
2013/12/20 Javascript
js改变Iframe中Src的方法
2015/05/05 Javascript
前端JS面试中常见的算法问题总结
2016/12/23 Javascript
Javascript快速实现浏览器系统通知
2017/08/26 Javascript
微信小程序 swiper组件构建轮播图的实例
2017/09/20 Javascript
解决vue 路由变化页面数据不刷新的问题
2018/03/13 Javascript
微信小程序项目实践之主页tab选项实现
2018/07/18 Javascript
mpvue将vue项目转换为小程序
2018/09/30 Javascript
Paypal支付不完全指北
2020/06/04 Javascript
python实现绘制树枝简单示例
2014/07/24 Python
Python基于matplotlib实现绘制三维图形功能示例
2018/01/18 Python
实例讲解Python中整数的最大值输出
2019/03/17 Python
python制作抖音代码舞
2019/04/07 Python
Python自定义一个异常类的方法
2019/06/27 Python
CSS3 text-shadow实现文字阴影效果
2016/02/24 HTML / CSS
如何获取某个日期是当月的最后一天
2013/12/05 面试题
计算机专业学生求职信分享
2013/12/15 职场文书
搬家公司的创业计划书
2014/01/01 职场文书
运动会演讲稿100字
2014/08/25 职场文书
党支部组织生活会整改方案
2014/09/30 职场文书
幼儿园大班个人总结
2015/02/28 职场文书
2015年大学生入党自荐书
2015/03/24 职场文书
2015年度培训工作总结范文
2015/04/02 职场文书
2015年劳动部工作总结
2015/05/23 职场文书
食品卫生管理制度
2015/08/06 职场文书
初中信息技术教学反思
2016/02/16 职场文书
spring boot中nativeQuery的用法
2021/07/26 Java/Android
在 Python 中利用 Pool 进行多线程
2022/04/24 Python