浅谈在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 相关文章推荐
javaScript同意等待代码实现心得
Jan 01 Javascript
JavaScript获取页面上某个元素的代码
Mar 13 Javascript
一些有用的JavaScript和jQuery的片段分享
Aug 23 Javascript
JavaScript NodeTree导航栏(菜单项JSON类型/自制)
Feb 01 Javascript
jquery实现微博文字输入框 输入时显示输入字数 效果实现
Jul 12 Javascript
js实现图片点击左右轮播
Jul 08 Javascript
JavaScript事件学习小结(五)js中事件类型之鼠标事件
Jun 09 Javascript
从零开始学习Node.js系列教程之SQLite3和MongoDB用法分析
Apr 13 Javascript
vue轮播图插件vue-concise-slider的使用
Mar 13 Javascript
layui table 表格模板按钮的实例代码
Sep 21 Javascript
使用Vue-cli3.0创建的项目 如何发布npm包
Oct 10 Javascript
如何基于原生javaScript生成带图片的二维码
Nov 21 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 采集心得技巧
2009/05/15 PHP
php中定义网站根目录的常用方法
2010/08/08 PHP
PHP中的cookie不用刷新就生效的方法
2012/02/04 PHP
JavaScript 垃圾回收机制分析
2013/10/10 Javascript
原生js和jquery中有关透明度设置的相关问题
2014/01/08 Javascript
alert和confirm功能介绍
2014/05/21 Javascript
javascript实现类似java中getClass()得到对象类名的方法
2015/07/27 Javascript
继续学习javascript闭包
2015/12/03 Javascript
javascript合并表格单元格实例代码
2016/01/03 Javascript
学习JavaScript设计模式之责任链模式
2016/01/18 Javascript
jQuery+formdata实现上传进度特效遇到的问题
2016/02/24 Javascript
JavaScript面向对象程序设计教程
2016/03/29 Javascript
js在ie下打开对话窗口的方法小结
2016/10/24 Javascript
jstree的简单实例
2016/12/01 Javascript
Vue组件开发初探
2017/02/14 Javascript
jQuery基于cookie实现换肤功能实例
2017/10/14 jQuery
基于vue配置axios的方法步骤
2017/11/09 Javascript
从组件封装看Vue的作用域插槽的实现
2019/02/12 Javascript
javascript中contains是否包含功能实现代码(扩展字符、数组、dom)
2020/04/07 Javascript
[49:08]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
python获取目录下所有文件的方法
2015/06/01 Python
Python实现配置文件备份的方法
2015/07/30 Python
python一键升级所有pip package的方法
2017/01/16 Python
Linux RedHat下安装Python2.7开发环境
2017/05/20 Python
python2.7安装图文教程
2018/03/13 Python
详解tensorflow载入数据的三种方式
2018/04/24 Python
python opencv捕获摄像头并显示内容的实现
2019/07/11 Python
Python3连接Mysql8.0遇到的问题及处理步骤
2020/02/17 Python
Python操作Excel工作簿的示例代码(\*.xlsx)
2020/03/23 Python
Tensorflow--取tensorf指定列的操作方式
2020/06/30 Python
HTML5的video标签的浏览器兼容性增强方案分享
2016/05/19 HTML / CSS
跑鞋、网球鞋、网球拍、服装及装备:Holabird Sports
2016/09/19 全球购物
查询优化的一般准则有哪些
2015/03/08 面试题
最新茶叶店创业计划书
2014/01/14 职场文书
共产党员公开承诺书范文
2014/03/28 职场文书
Java使用jmeter进行压力测试
2021/07/09 Java/Android