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输出列表实现代码
Sep 12 Javascript
优化Jquery,提升网页加载速度
Nov 14 Javascript
JavaScript中实现单体模式分享
Jan 29 Javascript
jQuery实现购物车表单自动结算效果实例
Aug 10 Javascript
Vue.js第四天学习笔记
Dec 02 Javascript
Angular 2父子组件数据传递之@Input和@Output详解(下)
Jul 05 Javascript
node.js遍历目录的方法示例
Aug 01 Javascript
从理论角度讨论JavaScript闭包
Apr 03 Javascript
解决前后端分离 vue+springboot 跨域 session+cookie失效问题
May 13 Javascript
Vue使用Proxy监听所有接口状态的方法实现
Jun 07 Javascript
vue实现把接口单独存放在一个文件方式
Aug 13 Javascript
js实现飞机大战游戏
Aug 26 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
雄兵连:天使彦天使彦为爱折翼,彦和炙心同时念动的誓言!
2020/03/02 国漫
配置支持SSI
2006/11/25 PHP
php可变长参数处理函数详解
2017/02/22 PHP
学习面向对象之面向对象的基本概念:对象和其他基本要素
2010/11/30 Javascript
javascript学习笔记(十一) 正则表达式介绍
2012/06/20 Javascript
jQuery插件-jRating评分插件源码分析及使用方法
2012/12/28 Javascript
使用原生JS实现弹出层特效
2014/12/22 Javascript
javascript实现微信分享
2014/12/23 Javascript
JavaScript html5 canvas画布中删除一个块区域的方法
2016/01/26 Javascript
原生JavaScript制作微博发布面板效果
2016/03/11 Javascript
JavaScript实现复制内容到粘贴板代码
2016/03/31 Javascript
ThinkPHP+jquery实现“加载更多”功能代码
2017/03/11 Javascript
JS/jquery实现一个网页内同时调用多个倒计时的方法
2017/04/27 jQuery
Vue源码探究之状态初始化
2018/11/14 Javascript
微信小程序日历组件使用方法详解
2018/12/29 Javascript
vue + typescript + video.js实现 流媒体播放 视频监控功能
2019/07/07 Javascript
js实现简单的日历显示效果函数示例
2019/11/25 Javascript
解决echarts数据二次渲染不成功的问题
2020/07/20 Javascript
浅谈JavaScript窗体Window.ShowModalDialog使用
2020/07/22 Javascript
python通过邮件服务器端口发送邮件的方法
2015/04/30 Python
Python保存MongoDB上的文件到本地的方法
2016/03/16 Python
Selenium chrome配置代理Python版的方法
2018/11/29 Python
Python如何脚本过滤文件中的注释
2020/05/27 Python
Django创建一个后台的基本步骤记录
2020/10/02 Python
波比布朗英国官网:Bobbi Brown英国
2017/11/13 全球购物
世界上最好的儿童品牌:AlexandAlexa
2018/01/27 全球购物
Hotter Shoes美国官网:英国最受欢迎的舒适鞋
2018/08/02 全球购物
一站式跨境收款解决方案:Payoneer(派安盈)
2018/09/06 全球购物
英国拖鞋购买网站:Bedroom Athletics
2020/02/28 全球购物
优秀员工获奖感言
2014/03/01 职场文书
个人安全生产承诺书
2014/05/22 职场文书
施工工地安全标语
2014/06/07 职场文书
大学毕业论文致谢词
2015/05/14 职场文书
就业指导讲座心得体会
2016/01/15 职场文书
JS Canvas接口和动画效果大全
2021/04/29 Javascript
MySQL添加索引特点及优化问题
2022/07/23 MySQL