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实现下拉框的动态添加(附效果)
Apr 03 Javascript
JS匀速运动演示示例代码
Nov 26 Javascript
$.each与$().each的区别示例介绍
Mar 20 Javascript
JavaScript判断变量是对象还是数组的方法
Aug 28 Javascript
jquery实现超简洁的TAB选项卡效果代码
Aug 28 Javascript
基于jQuery实现数字滚动效果
Jan 16 Javascript
详谈构造函数加括号与不加括号的区别
Oct 26 Javascript
理解 JavaScript EventEmitter
Mar 29 Javascript
JavaScript中join()、splice()、slice()和split()函数用法示例
Aug 24 Javascript
JavaScript实现联动菜单特效
Jan 07 Javascript
jQuery中event.target和this的区别详解
Aug 13 jQuery
微信小程序实现首页弹出广告
Dec 03 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
如何开始收听短波广播
2021/03/01 无线电
漂亮但不安全的CTB
2006/10/09 PHP
PHP教程 基本语法
2009/10/23 PHP
ThinkPHP函数详解之M方法和R方法
2015/09/10 PHP
javascript parseInt 大改造
2009/09/27 Javascript
poshytip 基于jquery的 插件 主要用于显示微博人的图像和鼠标提示等
2012/10/12 Javascript
jQuery学习笔记(1)--用jQuery实现异步通信(用json传值)具体思路
2013/04/08 Javascript
js网页版计算器的简单实现
2013/07/02 Javascript
Node.js开源应用框架HapiJS介绍
2015/01/14 Javascript
个人总结的一些JavaScript技巧、实用函数、简洁方法、编程细节
2015/06/10 Javascript
JavaScript里 ==与===区别详解
2016/08/16 Javascript
Node.js和Express简单入门介绍
2017/03/24 Javascript
javaScript产生随机数的用法小结
2018/04/21 Javascript
关于AngularJS中ng-repeat不更新视图的解决方法
2018/09/30 Javascript
详解ES6数组方法find()、findIndex()的总结
2020/05/12 Javascript
Vue中ref和$refs的介绍以及使用方法示例
2021/01/11 Vue.js
python3实现短网址和数字相互转换的方法
2015/04/28 Python
Python使用回溯法子集树模板解决爬楼梯问题示例
2017/09/08 Python
Tensorflow累加的实现案例
2020/02/05 Python
Python类及获取对象属性方法解析
2020/06/15 Python
PyCharm 解决找不到新打开项目的窗口问题
2021/01/15 Python
HTML5+CSS3实现机器猫
2016/10/17 HTML / CSS
JDO的含义
2012/11/17 面试题
怎样自定义一个异常类
2016/09/27 面试题
中专毕业生自我鉴定范文
2013/11/09 职场文书
中学生在校期间的自我评价分享
2013/11/13 职场文书
《王二小》教学反思
2014/02/27 职场文书
暑假家长评语大全
2014/04/17 职场文书
学生评语大全
2014/04/18 职场文书
竞选班长演讲稿500字
2014/08/22 职场文书
2014年学校后勤工作总结
2014/12/06 职场文书
2014年党总支工作总结
2014/12/18 职场文书
学雷锋献爱心活动总结
2015/05/11 职场文书
三八节活动简报
2015/07/20 职场文书
关于做家务的心得体会
2016/01/23 职场文书
python批量创建变量并赋值操作
2021/06/03 Python