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 相关文章推荐
极酷的javascirpt,让你随意编辑任何网页
Feb 25 Javascript
document.createElement()用法
Mar 13 Javascript
js setTimeout 常见问题小结
Aug 13 Javascript
node.js正则表达式获取网页中所有链接的代码实例
Jun 03 Javascript
web前端设计师们常用的jQuery特效插件汇总
Dec 07 Javascript
JavaScript保留关键字汇总
Dec 01 Javascript
javascript创建对象、对象继承的实用方式详解
Mar 08 Javascript
jQuery制作网页版选项卡
Jul 28 Javascript
浅谈angular4.0中路由传递参数、获取参数最nice的写法
Mar 12 Javascript
详解Angular6.0使用路由步骤(共7步)
Jun 29 Javascript
解决node终端下运行js文件不支持ES6语法
Apr 04 Javascript
如何用JavaScript实现一个数组惰性求值库
May 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
正义联盟的终局之战《天启星战争》将成为DC动画宇宙的最后一部
2020/04/09 欧美动漫
PHP 将逗号、空格、回车分隔的字符串转换为数组的函数
2012/06/07 PHP
PHP 处理TXT文件(打开/关闭/检查/读取)
2013/05/13 PHP
举例详解PHP脚本的测试方法
2015/08/05 PHP
php实现CSV文件导入和导出
2015/10/24 PHP
PHP弱类型语言中类型判断操作实例详解
2017/08/10 PHP
CSS中一些@规则的用法小结
2021/03/09 HTML / CSS
js实现简单的星级选择器提交效果适用于评论等
2013/10/18 Javascript
JS弹出窗口的运用与技巧大全
2016/11/01 Javascript
JavaScript实现单例模式实例分享
2017/12/22 Javascript
jQuery length 和 size()区别总结
2018/04/26 jQuery
详解JSON和JSONP劫持以及解决方法
2019/03/08 Javascript
layui table设置某一行的字体颜色方法
2019/09/05 Javascript
Jquery属性的获取/设置及样式添加/删除操作技巧分析
2019/12/23 jQuery
一文秒懂JavaScript构造函数、实例、原型对象以及原型链
2020/08/25 Javascript
Express 配置HTML页面访问的实现
2020/11/01 Javascript
[01:01:22]VGJ.S vs OG 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
跟老齐学Python之list和str比较
2014/09/20 Python
在Docker上开始部署Python应用的教程
2015/04/17 Python
详解如何用OpenCV + Python 实现人脸识别
2017/10/20 Python
Python3实现转换Image图片格式
2018/06/21 Python
Python3标准库总结
2019/02/19 Python
Python2与Python3的区别实例分析
2019/04/11 Python
js实现移动端H5页面手指滑动刻度尺功能
2017/11/16 HTML / CSS
印度尼西亚手表和包包商店:Urban Icon
2019/12/12 全球购物
波兰办公用品和学校用品在线商店:Dlabiura24.pl
2020/11/18 全球购物
接口可以包含哪些成员
2012/09/30 面试题
2014高考励志标语
2014/06/05 职场文书
大学生交通专业求职信
2014/09/01 职场文书
党的群众路线教育实践活动通讯稿
2014/09/10 职场文书
学生自我鉴定格式及范文
2014/09/16 职场文书
人事任命通知
2015/04/20 职场文书
2015中学教师个人工作总结
2015/07/22 职场文书
电力安全教育培训心得体会
2016/01/11 职场文书
查看nginx配置文件路径和资源文件路径的方法
2021/03/31 Servers
mysql的Buffer Pool存储及原理
2022/04/02 MySQL