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 浏览器验证代码(来自discuz)
Jul 17 Javascript
JavaScript面向对象知识串结(读JavaScript高级程序设计(第三版))
Jul 17 Javascript
JQuery为textarea添加maxlength属性并且兼容IE
Apr 25 Javascript
Web表单提交之disabled问题js解决方法
Jan 13 Javascript
使用javascript实现判断当前浏览器
Apr 14 Javascript
基于jQuery实现仿百度首页换肤背景图片切换代码
Aug 25 Javascript
Bootstrap自定义文件上传下载样式
May 26 Javascript
javascript九宫格图片随机打乱位置的实现方法
Mar 15 Javascript
Easy UI动态树点击文字实现展开关闭功能
Sep 30 Javascript
用node开发并发布一个cli工具的方法步骤
Jan 03 Javascript
Vue编程式跳转的实例代码详解
Jul 10 Javascript
layui多iframe页面控制定时器运行的方法
Sep 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
实用函数9
2007/11/08 PHP
php编程实现获取excel文档内容的代码实例
2011/06/28 PHP
php实现发送微信模板消息的方法
2015/03/07 PHP
php分页原理 分页代码 分页类制作教程
2016/09/23 PHP
Yii2中添加全局函数的方法分析
2017/05/04 PHP
用ADODB.Stream转换
2007/01/22 Javascript
javascript 写类方式之九
2009/07/05 Javascript
Ext对基本类型的扩展 ext,extjs,format
2010/12/25 Javascript
setInterval,setTimeout与jquery混用的问题
2013/04/08 Javascript
JavaScript 数组详解
2013/10/10 Javascript
jQuery事件用法实例汇总
2014/08/29 Javascript
Javascript 读取操作Sql中的Xml字段
2014/10/09 Javascript
微信小程序 MINA文件结构
2016/10/17 Javascript
node.js缺少mysql模块运行报错的解决方法
2016/11/13 Javascript
jquery封装插件时匿名函数形参和实参的写法解释
2017/02/14 Javascript
浅谈node.js 命令行工具(cli)
2018/05/10 Javascript
JS中封装axios来管控api的2种方式
2019/09/11 Javascript
如何基于js判断浏览器版本
2020/02/20 Javascript
python实现网站的模拟登录
2016/01/04 Python
Python的网络编程库Gevent的安装及使用技巧
2016/06/24 Python
python日志记录模块实例及改进
2017/02/12 Python
Python3 导入上级目录中的模块实例
2019/02/16 Python
Python 序列化和反序列化库 MarshMallow 的用法实例代码
2020/02/25 Python
详解Selenium-webdriver绕开反爬虫机制的4种方法
2020/10/28 Python
阿迪达斯荷兰官方网站:adidas荷兰
2018/03/16 全球购物
印尼网上商店:Alfacart.com
2019/03/11 全球购物
勤俭节约倡议书
2014/04/14 职场文书
初中教师业务学习材料
2014/05/12 职场文书
小学师德师风整改措施
2014/10/27 职场文书
高中生自我评价范文2015
2015/03/03 职场文书
2015年度内部审计工作总结
2015/05/20 职场文书
房产证明范本
2015/06/19 职场文书
2016年十一促销广告语
2016/01/28 职场文书
2019年最新感恩节祝福语(28句)
2019/11/27 职场文书
Jsonp劫持学习
2021/04/01 PHP
CSS的class与id常用的命名规则
2021/05/18 HTML / CSS