浅谈在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学习4 浏览器的事件模型
Feb 07 Javascript
jquery异步循环获取功能实现代码
Sep 19 Javascript
关于jQuery参考实例 1.0 jQuery的哲学
Apr 07 Javascript
js 将json字符串转换为json对象的方法解析
Nov 13 Javascript
jquery实现可自动收缩的TAB网页选项卡代码
Sep 06 Javascript
Jquery中request和request.form和request.querystring的区别
Nov 26 Javascript
ES6新特征数字、数组、字符串
Oct 01 Javascript
JavaScript中关键字 in 的使用方法详解
Oct 17 Javascript
详解用node-images 打造简易图片服务器
May 08 Javascript
详解Vue项目引入CreateJS的方法(亲测可用)
May 30 Javascript
原生JavaScript实现刮刮乐
Sep 29 Javascript
JavaScript对象访问器Getter及Setter原理解析
Dec 08 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
解析数组非数字键名引号的必要性
2013/08/09 PHP
php实例分享之mysql数据备份
2014/05/19 PHP
PHP实现一个简单url路由功能实例
2016/11/05 PHP
phpstudy默认不支持64位php的解决方法
2017/02/20 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
PHP使用反向Ajax技术实现在线客服系统详解
2019/07/01 PHP
jquery 中的each()跳出循环的语句
2014/05/23 Javascript
使用insertAfter()方法在现有元素后添加一个新元素
2014/05/28 Javascript
js闭包实现按秒计数
2015/04/23 Javascript
jQuery+CSS3折叠卡片式下拉列表框实现效果
2015/11/02 Javascript
JavaScript实现输入框(密码框)出现提示语
2016/01/12 Javascript
JS动态改变浏览器标题的方法
2016/04/06 Javascript
Javascript实现一个简单的输入关键字添加标签效果实例
2017/06/01 Javascript
AngularJS自定义指令详解(有分页插件代码)
2017/06/12 Javascript
AngularJS点击添加样式、点击变色设置的实例代码
2017/07/27 Javascript
解决Vue2.0自带浏览器里无法打开的原因(兼容处理)
2017/07/28 Javascript
一篇文章带你使用Typescript封装一个Vue组件(简单易懂)
2020/06/05 Javascript
Javascript基于OOP实实现探测器功能代码实例
2020/08/26 Javascript
python基础教程之基本内置数据类型介绍
2014/02/20 Python
Python获取暗黑破坏神3战网前1000命位玩家的英雄技能统计
2016/07/04 Python
PyCharm 常用快捷键和设置方法
2017/12/20 Python
在Pycharm中设置默认自动换行的方法
2019/01/16 Python
python+opencv实现摄像头调用的方法
2019/06/22 Python
python+openCV调用摄像头拍摄和处理图片的实现
2019/08/06 Python
Pytorch evaluation每次运行结果不同的解决
2020/01/02 Python
Python读写csv文件流程及异常解决
2020/10/20 Python
python实现图片,视频人脸识别(dlib版)
2020/11/18 Python
葡萄牙航空官方网站:TAP Air Portugal
2019/10/31 全球购物
ORLY官网:美国专业美甲一线品牌
2019/12/11 全球购物
IMPORT的选项IGNORE有什么作用?缺省是什么设置?
2015/09/17 面试题
初级Java程序员面试题
2016/03/03 面试题
大学生四年生活自我鉴定
2013/11/21 职场文书
文明礼仪标语
2014/06/13 职场文书
党员四风自我剖析材料思想汇报
2014/09/13 职场文书
关于nginx 实现jira反向代理的问题
2021/09/25 Servers
天谕手游15杯全调酒配方和调酒券的获得方式
2022/04/06 其他游戏