浅谈在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 prototype原型操作笔记
Dec 07 Javascript
window.open以post方式将内容提交到新窗口
Dec 26 Javascript
Bootstrap前端开发案例二
Jun 17 Javascript
Javascript点击按钮随机改变数字与其颜色
Sep 01 Javascript
H5用户注册表单页 注册模态框!
Sep 17 Javascript
详解JavaScript权威指南之对象
Sep 27 Javascript
AngularJS路由实现页面跳转实例
Mar 03 Javascript
Angular2下使用pdf插件的方法详解
Apr 29 Javascript
详解一个小实例理解js原型和继承
Apr 24 Javascript
利用JavaScript将Excel转换为JSON示例代码
Jun 14 Javascript
javascript随机变色实例代码
Oct 15 Javascript
Node.js API详解之 os模块用法实例分析
May 06 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
JS中encodeURIComponent函数用php解码的代码
2012/03/01 PHP
php常用ODBC函数集(详细)
2013/06/24 PHP
php 伪静态之IIS篇
2014/06/02 PHP
workerman结合laravel开发在线聊天应用的示例代码
2018/10/30 PHP
Mootools 1.2教程 选项卡效果(Tabs)
2009/09/15 Javascript
javascript 模拟JQuery的Ready方法实现并出现的问题
2009/12/06 Javascript
jQuery Validation插件remote验证方式的Bug解决
2010/07/01 Javascript
jquery中ajax学习笔记一
2011/10/16 Javascript
jquery获取css中的选择器(实例讲解)
2013/12/02 Javascript
jQuery中click事件的定义和用法
2014/12/20 Javascript
jquery插件qrcode在线生成二维码
2015/04/26 Javascript
原生JS实现图片翻书效果
2017/02/16 Javascript
jQuery鼠标移动图片上实现放大效果
2017/06/25 jQuery
从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法
2018/09/18 Javascript
vue--vuex详解
2019/04/15 Javascript
Vue项目中配置pug解析支持
2019/05/10 Javascript
在Vue.js中使用TypeScript的方法
2020/03/19 Javascript
微信小程序scroll-view点击项自动居中效果的实现
2020/03/25 Javascript
[36:37]2014 DOTA2华西杯精英邀请赛5 24 VG VS iG
2014/05/25 DOTA
[02:37]2015国际邀请赛选手档案—LGD.Xiao8
2015/07/28 DOTA
[04:51]TI10典藏宝瓶Ⅱ外观视频展示
2020/08/15 DOTA
python发送HTTP请求的方法小结
2015/07/08 Python
Tornado高并发处理方法实例代码
2018/01/15 Python
django数据库migrate失败的解决方法解析
2018/02/08 Python
python-tornado的接口用swagger进行包装的实例
2019/08/29 Python
Django model class Meta原理解析
2020/11/14 Python
AmazeUI的JS表单验证框架实战示例分享
2020/08/21 HTML / CSS
清洁工岗位职责
2014/01/29 职场文书
事业单位分类改革实施方案
2014/03/21 职场文书
教师民族团结演讲稿
2014/08/27 职场文书
2014年村计划生育工作总结
2014/11/14 职场文书
公司行政主管岗位职责
2015/04/09 职场文书
广播体操比赛主持词
2015/06/29 职场文书
党组织结对共建协议书
2016/03/23 职场文书
Python Numpy库的超详细教程
2022/04/06 Python
Mysql开启外网访问
2022/05/15 MySQL