美文网首页
判断扫码输入和手动输入

判断扫码输入和手动输入

作者: sxfshdf | 来源:发表于2019-07-17 10:41 被阅读0次

项目中使用到了扫码枪,记录下使用方法。扫码枪也是和键盘一样的一种输入设备,一般扫码结束后会自带回车,键入的速度会比手动输入快,可以通过判断输入间隔时间判断是扫码输入还是手动输入。用扫码枪时输入法需要切换到英文,中文状态下会有bug出现。

html中的一个input

<input class="sweep-box" placeholder="扫描条码"
           ref="barcodeBox"
           type="text"
           @keyup="sweepBarcode($event)"
           @keydown="sweepDown">

js相关代码

export default = {
  data() {
    return {
      keyUpTime: '', 
      keyDownTime: '', // 按键按下的时间
      spanTime: 20, // 一个按键按下到释放的时间 小于等于则是扫码,大于则是手动输入
      oneKeyTime: '', // 一次按键之间的间隔时间
      twoKeyTime: '', // 两次按键之间间隔
      code: '',
    }  
  },
  methods: {
    // 监听按键按下
    sweepDown() {
      let curTime = Date.now()
      if (this.keyDownTime !== '' && this.keyDownTime !== NaN) {
        this.twoKeyTime = curTime - this.keyDownTime
      }
      this.keyDownTime = curTime
    },
    // 监听按键释放
    sweepBarcode(e) {
      let keyUpTime = Date.now()
      this.oneKeyTime = keyUpTime - this.keyDownTime
      let isHand = this.checkHandInput();
      if (!isHand) {
         // 扫描输入状态
        // 按键的值可以通过 e.key得到 扫码枪一般扫码结束后自带回车,所以可以通过判断 e.key 的值是否为 Enter 来设置扫码结束后的操作 
        this.sweep(e)
      } else {
        // 手动输入状态
        if(e.key === 'Enter') {
          // 按下回车后的操作
        }
      }
    },
    // 判断是扫码还是手动输入
    checkHandInput() {
      if ((this.oneKeyTime > this.spanTime)) {
        // 手动输入
        return true;
      } else {
        // 扫码输入
        return false;
      }
    },
    sweep(e, type) {
    //  使用中是 win10系统的一个触控屏幕,发现扫码结束在回车后会有个 ArrowDown ,所以做了一下处理。
      if (e.key !== 'ArrowDown') {
          // 每次重新扫码时 清空输入框
         this.$refs.barcodeBox.value = ''
      }
      if (this.code) {
        if (e.key === 'Enter' || e.keyCode == 13 || e.which == 13) {
          // 得到扫码的值
          this.code = this.handleShift(this.code)
          return
        }
        this.code = this.code + e.key
      } else {
        if (e.key === 'ArrowDown') {
          this.code = ''
        } else {
          this.code = e.key
        }
      }
    },
    // 在实际操作中发现在扫码过程中通过 e.key去会去扫码内容时,遇到大写字母时会得到 Shift + 小写字母的组合,如 C 的话会是 Shiftc,所得会有不同,但是如果直接取 input 中的值则是没有问题。
    // 所以在用 e.key 的方式获取扫码内容时对 shift 进行以下处理。
   // 通过e.key得到所有扫码的值后,通过Shift 对值进行分割,之后得到一个数组,然后对每个数组中每个元素中的第一个元素进行大写转换。
    handleShift(str) {
      // 判断第一个字母是否需要大写
        let string = str.slice(0, 5)
        let upperArr
        if (string === 'Shift') {
          let newArr = str.split('Shift')
          upperArr = newArr.map(item => {
            let item1
            if (item) {
              item1 = item.slice(0, 1).toUpperCase() + item.slice(1)
            }
            return item1
          })
        } else {
          let newArr = str.split('Shift')
          let headItem = newArr.slice(0, 1)
          let body = newArr.slice(1)
          let arr1 = body.map(item => {
            let item1 = item.slice(0, 1).toUpperCase() + item.slice(1)
            return item1
          })
          upperArr = headItem.concat(arr1)
        }
        return upperArr.join('')
      },
  }
}

参考了 git 上的一个关于扫码的代码
https://github.com/bigbignerd/jQuery_barcode_listener/blob/master/src/jquery.barcode.js

相关文章

  • 判断扫码输入和手动输入

    项目中使用到了扫码枪,记录下使用方法。扫码枪也是和键盘一样的一种输入设备,一般扫码结束后会自带回车,键入的速度会比...

  • js获取扫码枪输入

    场景:扫码枪扫码,获取信息,js代码如何获取扫描信息呢? 原理:扫码枪输入会触发键盘输入事件。扫码枪输入的时间间隔...

  • 省大师推荐关系锁定方案紧急变更通知

    1、扫码下载、扫码购物,均不绑定上下级关系 2、仅在新用户安装APP,在APP内首次微信登录【手动输入邀请码】才绑...

  • android使用扫码枪被系统键盘拦截的问题 2019-08-1

    android接入扫码枪,主动扫码却弹出键盘拦截了输入,导致前端onkeypress事件无法接收到输入字符。 US...

  • python3的爬虫笔记7——验证码登录

    (1)方法一手动输入验证码 对于需要验证码登录的情况,采用先下载验证码图片,手动输入后,利用cookie保持在线,...

  • 新形势下的自动打码器和人工打码

    在你使用某某抢购软件的时候,需要手动输入图片验证码的时候,或者你需要使用某检测机,网络工具,需要手动输入图片验证码...

  • Form界面输入框修改输入法状态

    问题 出现过在系统为中文输入法的情况下二维码中有字母从而导致扫描仪扫码出中文的情况 方案 在要扫码输入的输入框中禁...

  • 什么是创新?

    减少人操作和时间的设计和技术就是创新。 输入验证码 以前是验证码短信来了,用户读取数字并手动输入。现在是短信来了,...

  • android扫描网页二维码进行网页登录

    周六和朋友去网吧开黑,开机打开TGP,朋友那边开始输入账号密码,我看了他一眼low逼,现在谁还手动输入,手机扫一扫...

  • react实现扫码枪输入

    今天接到一个和扫码枪有关的任务,听起来就很有意思。 项目背景:列表页进入详情页的方式目前有两种 直接点击列表进入 ...

网友评论

      本文标题:判断扫码输入和手动输入

      本文链接:https://www.haomeiwen.com/subject/nlbflctx.html