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 相关文章推荐
解析DHTML,JavaScript,DOM,BOM以及WEB标准的描述
Jun 19 Javascript
jquery常用特效方法使用示例
Apr 25 Javascript
js语法学习之判断一个对象是否为数组
May 13 Javascript
JavaScript sub方法入门实例(把字符串显示为下标)
Oct 17 Javascript
JavaScript实现的字符串replaceAll函数代码分享
Apr 02 Javascript
详解Javascript中prototype属性(推荐)
Sep 03 Javascript
javascript-解决mongoose数据查询的异步操作
Dec 22 Javascript
基于axios 解决跨域cookie丢失的问题
Sep 26 Javascript
vue实现压缩图片预览并上传功能(promise封装)
Jan 10 Javascript
JavaScript继承与聚合实例详解
Jan 22 Javascript
vue2.x 通过后端接口代理,获取qq音乐api的数据示例
Oct 30 Javascript
Jquery Fade用法详解
Nov 06 jQuery
使用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
PHP set_time_limit(0)长连接的实现分析
2010/03/02 PHP
php实现的SESSION类
2014/12/02 PHP
基于PHP实现商品成交时发送短信功能
2016/05/11 PHP
laravel 实现登陆后返回登陆前的页面方法
2019/10/03 PHP
用js统计用户下载网页所需时间的脚本
2008/10/15 Javascript
javascript 动态加载 css 方法总结
2009/07/11 Javascript
Javascript Math对象
2009/08/13 Javascript
使用JavaScript检测Firefox浏览器是否启用了Firebug的代码
2010/12/28 Javascript
js 控制下拉菜单刷新的方法
2013/03/03 Javascript
javascript常用函数(1)
2015/11/04 Javascript
Javascript设计模式之观察者模式(推荐)
2016/03/29 Javascript
再谈javascript常见错误及解决方法
2016/09/16 Javascript
js 打开新页面在屏幕中间的实现方法
2016/11/02 Javascript
微信小程序 本地存储及登录页面处理实例详解
2017/01/11 Javascript
JS表单验证方法实例小结【电话、身份证号、Email、中文、特殊字符、身份证号等】
2017/02/14 Javascript
JavaScript实现鼠标滚轮控制页面图片切换功能示例
2017/10/14 Javascript
基于nodejs res.end和res.send的区别
2018/05/14 NodeJs
js实现图片局部放大效果详解
2019/03/18 Javascript
解决使用layui对select append元素无效或者未及时更新的问题
2019/09/18 Javascript
vue项目中定义全局变量、函数的几种方法
2019/11/08 Javascript
[08:08]2014DOTA2国际邀请赛中国区预选赛精彩TOPPLAY
2014/06/25 DOTA
wtfPython—Python中一组有趣微妙的代码【收藏】
2018/08/31 Python
解析python的局部变量和全局变量
2019/08/15 Python
python opencv 实现读取、显示、写入图像的方法
2020/06/08 Python
Python Serial串口基本操作(收发数据)
2020/11/06 Python
CSS 3.0文字悬停跳动特效代码
2020/10/26 HTML / CSS
HTML5新增的标签和属性归纳总结
2018/05/02 HTML / CSS
美国一家运动专业鞋类零售商:Warehouse Shoe Sale(WSS)
2018/03/28 全球购物
Stokke美国官方网店:高级儿童家具、推车、汽车座椅和配件
2020/06/06 全球购物
亚马逊新加坡官方网站:Amazon.sg
2020/03/25 全球购物
网络通讯中,端口有什么含义,端口的取值范围
2012/11/23 面试题
高中学生评语大全
2014/04/25 职场文书
戒毒悔改检讨书
2014/09/21 职场文书
2014年监理工作总结范文
2014/11/17 职场文书
承诺书应该怎么写?
2019/09/10 职场文书
JavaCV实现照片马赛克效果
2022/01/22 Java/Android