百搜论坛欢迎您的加入!
adimg adimg
 
昨日:篇  今日:篇   总帖:篇   会员:
博主最大Lv63   
一起看看js获取扫码枪输入数据的方法     

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扫码枪数据的代码


前言


找了很多相关的教程不太好用,汲取各家之长总结精简了一下


原理


扫码枪扫描到的条形码每一位会触发一次onkeydown事件

比如扫描条码位‘1234567890'的条形码,会连续执行10次onkeydown事件

条码扫描到最后一位,会直接触发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;


    }


  }


}

 0  已被阅读了1204次  楼主 2020-07-12 11:24:55
回复列表

回复:一起看看js获取扫码枪输入数据的方法

联系站长 友链申请桂ICP备19000949号-1     桂ICP备19000949号-1
您的IP:18.116.36.192,2024-04-26 00:20:48,Processed in 0.01771 second(s).
免责声明: 本网不承担任何由内容提供商提供的信息所引起的争议和法律责任。
Powered by HadSky 7.12.9
已有0次打赏
(0) 分享
分享
取消
免责声明
1、本站资源,均来自网络,版权归原作者,所有资源和文章仅限用于学习和研究目的 。
2、不得用于商业或非法用途,否则,一切责任由该用户承担 !
如果觉得本文还不错请点个赞或者打赏点轻币哦~
拒绝伸手党,拿走请回复,尊重楼主,尊重你我他~

侵权删除请致信 E-Mail:207882320@qq.com