浅谈在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 mobile库检测url绝对地址和相对地址的方法
Dec 04 Javascript
jQuery过滤特殊字符及JS字符串转为数字
May 26 Javascript
jquery轮播的实现方式 附完整实例
Jul 28 Javascript
同步异步动态引入js文件的几种方法总结
Sep 23 Javascript
js实现倒计时效果(小于10补零)
Mar 08 Javascript
ES6正则表达式的一些新功能总结
May 09 Javascript
详解微信小程序 相对定位和绝对定位
May 11 Javascript
Vue.js实现图片的随意拖动方法
Mar 08 Javascript
vue页面离开后执行函数的实例
Mar 13 Javascript
在NPM发布自己造的轮子的方法步骤
Mar 09 Javascript
解决Layui 表格自适应高度的问题
Nov 15 Javascript
JavaScript实现串行请求的示例代码
Sep 14 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
用mysql触发器自动更新memcache的实现代码
2009/10/11 PHP
PHP从二维数组得到N层分类树的实现代码
2016/10/11 PHP
PHP 信号管理知识整理汇总
2017/02/19 PHP
微信封装的调用微信签名包的类库
2017/06/08 PHP
Jquery CheckBox全选方法代码附js checkbox全选反选代码
2010/06/09 Javascript
10个基于Jquery的幻灯片插件教程
2010/10/29 Javascript
基于jQuery的烟花效果(运动相关)点击屏幕出烟花
2012/06/14 Javascript
IE事件对象(The Internet Explorer Event Object)
2012/06/27 Javascript
Extjs4 关于Store的一些操作(加载/回调/添加)
2013/04/18 Javascript
JS实现模仿微博发布效果实例代码
2013/12/16 Javascript
javascript实现锁定网页、密码解锁效果(类似系统屏幕保护效果)
2014/08/15 Javascript
jQuery插件HighCharts实现2D柱状图、折线图的组合多轴图效果示例【附demo源码下载】
2017/03/09 Javascript
jQuery is not defined 错误原因与解决方法小结
2017/03/19 Javascript
cdn模式下vue的基本用法详解
2018/10/07 Javascript
可能被忽略的一些JavaScript数组方法细节
2019/02/28 Javascript
js实现简单贪吃蛇游戏
2020/05/15 Javascript
js实现tab栏切换效果
2020/08/02 Javascript
理解JavaScript中的对象
2020/08/25 Javascript
小程序实现录音功能
2020/09/22 Javascript
js禁止查看源文件屏蔽Ctrl+u/s、F12、右键等兼容IE火狐chrome
2020/10/01 Javascript
Python实现求最大公约数及判断素数的方法
2015/05/26 Python
python执行子进程实现进程间通信的方法
2015/06/02 Python
python cx_Oracle的基础使用方法(连接和增删改查)
2017/11/19 Python
Numpy 改变数组维度的几种方法小结
2018/08/02 Python
细说NumPy数组的四种乘法的使用
2020/12/18 Python
美国领先的家庭健康检测试剂盒提供商:LetsGetChecked
2019/03/18 全球购物
企划主管岗位职责
2013/12/12 职场文书
十岁生日同学答谢词
2014/01/19 职场文书
抵押贷款承诺书
2014/05/30 职场文书
四年级学生期末评语
2014/12/26 职场文书
创业计划书之牛肉汤快餐店
2019/10/08 职场文书
JavaScript 去重和重复次数统计
2021/03/31 Javascript
如何用python插入独创性声明
2021/03/31 Python
vue+elementui 实现新增和修改共用一个弹框的完整代码
2021/06/08 Vue.js
使用nginx配置访问wgcloud的方法
2021/06/26 Servers
Python面向对象编程之类的概念
2021/11/01 Python