浅谈在react中如何实现扫码枪输入


Posted in Javascript onJuly 04, 2018

触发原理

原理就是监听键盘输入,比如扫一个为6970596130126的69条形码,用扫码枪扫一下会在光标位置依次输出:

6
9
7
0
5
9
6
1
3
0
2
6

但这不是完整的,所以需要写一个函数scanEvent来整理收集到的每个编号。

let code = '';
let lastTime,
  nextTime,
  lastCode,
  nextCode;


function scanEvent(e, cb) {
  nextCode = e.which;
  nextTime = new Date().getTime();

  if (lastCode != null && lastTime != null && nextTime - lastTime <= 30) {
    code += String.fromCharCode(lastCode);
  } else if (lastCode != null && lastTime != null && nextTime - lastTime > 100) {
    code = '';
  }

  lastCode = nextCode;
  lastTime = nextTime;
  if (e.which === 13) {
    cb(code);
    console.log('code', code);
    code = '';
  }
}

export { scanEvent };

react中的坑

当我们想在willComponentUnMount阶段移除监听器时,需要传递函数名,否则无法移除!!这是非常值得注意的一点。

完整使用

class Sample extends React.Component{
  componentDidMount(){
    window.addEventListener('keypress', this.scanWrapper, false);
  }

  componentWillUnmount() {
    window.removeEventListener('keypress', this.scanWrapper, false);
  }

  scanWrapper(e) {
    scanEvent(e, (code) => {
      // to do something...
    });
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
基于JQuery实现鼠标点击文本框显示隐藏提示文本
Feb 23 Javascript
AngularJS使用指令增强标准表单元素功能
Jul 01 Javascript
javascript表单正则应用
Feb 04 Javascript
angular-ngSanitize模块-$sanitize服务详解
Jun 13 Javascript
关于Ajax的原理以及代码封装详解
Sep 08 Javascript
解决vue项目打包后提示图片文件路径错误的问题
Jul 04 Javascript
vue2过滤器模糊查询方法
Sep 16 Javascript
默认浏览器设置及vue自动打开页面的方法
Sep 21 Javascript
详解如何使用node.js的开发框架express创建一个web应用
Dec 20 Javascript
vue 2.5.1 源码学习 之Vue.extend 和 data的合并策略
Jun 04 Javascript
微信小程序批量上传图片到七牛(推荐)
Dec 19 Javascript
详解JS函数防抖
Jun 05 Javascript
Redux实现组合计数器的示例代码
Jul 04 #Javascript
用Node编写RESTful API接口的示例代码
Jul 04 #Javascript
微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb
Jul 04 #Javascript
JS实现点击按钮可实现编辑功能
Jul 03 #Javascript
详解vue-cli中模拟数据的两种方法
Jul 03 #Javascript
echarts同一页面中四个图表切换的js数据交互方法示例
Jul 03 #Javascript
基于React+Redux的SSR实现方法
Jul 03 #Javascript
You might like
兼容性比较好的PHP生成缩略图的代码
2011/01/12 PHP
php生成局部唯一识别码LUID的代码
2012/10/06 PHP
PHP图片自动裁切应付不同尺寸的显示
2014/10/16 PHP
php通过rmdir删除目录的简单用法
2015/03/18 PHP
PHP+MySQL实现无极限分类栏目的方法
2015/12/23 PHP
Js动态创建div
2008/09/25 Javascript
再谈ie和firefox下的document.all属性
2009/10/21 Javascript
Javascript和Ajax中文乱码吐血版解决方案
2009/12/21 Javascript
Jquery实现无刷新DropDownList联动实现代码
2010/03/08 Javascript
jQuery.clean使用方法及思路分析
2013/01/07 Javascript
javascript实现颜色渐变的方法
2013/10/30 Javascript
浅析JavaScript中的delete运算符
2013/11/30 Javascript
javascript计算用户打开网页的停留时间
2014/01/09 Javascript
Javascript闭包(Closure)详解
2015/05/05 Javascript
javascript鼠标滑动评分控件完整实例
2015/05/13 Javascript
jQuery插件Slider Revolution实现响应动画滑动图片切换效果
2015/06/05 Javascript
AngularJS 所有版本下载地址
2016/09/14 Javascript
Bootstrap table使用方法总结
2017/05/10 Javascript
JS实现下拉菜单列表与登录注册弹窗效果
2017/08/10 Javascript
jQuery实现IE输入框完成placeholder标签功能的方法
2017/09/20 jQuery
在vue项目中优雅的使用SVG的方法实例详解
2018/12/03 Javascript
vue-router命名路由和编程式路由传参讲解
2019/01/19 Javascript
SpringBoot+Vue开发之Login校验规则、实现登录和重置事件
2020/10/19 Javascript
[02:46]2014DOTA2国际邀请赛 选手为你解读比赛MVP充满梦想
2014/07/09 DOTA
python区分不同数据类型的方法
2019/10/14 Python
Pytorch 实现权重初始化
2019/12/31 Python
python中matplotlib实现随鼠标滑动自动标注代码
2020/04/23 Python
你应该知道的Python3.6、3.7、3.8新特性小结
2020/05/12 Python
基于OpenCV的网络实时视频流传输的实现
2020/11/15 Python
100%羊绒:NakedCashmere
2020/08/26 全球购物
结婚周年感言
2014/02/24 职场文书
2014中学教师节广播稿
2014/09/10 职场文书
信用卡收入证明范本
2015/06/12 职场文书
求职信:求职应该注意的问题
2019/04/24 职场文书
golang DNS服务器的简单实现操作
2021/04/30 Golang
mybatis3中@SelectProvider传递参数方式
2021/08/04 Java/Android