浅谈在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 相关文章推荐
一个对于Array的简单扩展
Oct 03 Javascript
浅析javascript闭包 实例分析
Dec 25 Javascript
Extjs gridpanel 出现横向滚动条问题的解决方法
Jul 04 Javascript
JavaScript将相对地址转换为绝对地址示例代码
Jul 19 Javascript
JavaScript的jQuery库中ready方法的学习教程
Aug 14 Javascript
JavaScript简单实现鼠标移动切换图片的方法
Feb 23 Javascript
微信小程序 wxapp地图 map详解
Oct 31 Javascript
vue2.0结合Element-ui实战案例
Mar 06 Javascript
D3.js(v3)+react 实现带坐标与比例尺的散点图 (V3版本)
May 09 Javascript
TypeScript之调用栈的实现
Dec 31 Javascript
jquery实现烟花效果(面向对象)
Mar 10 jQuery
JS实现九宫格拼图游戏
Jun 28 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面向对象中的魔术方法中文说明
2014/03/04 PHP
PHP 中提示undefined index如何解决(多种方法)
2016/03/16 PHP
详解PHP的Yii框架中的Controller控制器
2016/03/29 PHP
php实现当前页面点击下载文件的实例代码
2016/11/16 PHP
PHP下载远程图片的几种方法总结
2017/04/07 PHP
return false;和e.preventDefault();的区别
2010/07/11 Javascript
通过jQuery源码学习javascript(一)
2012/12/27 Javascript
JS组件Bootstrap Table表格行拖拽效果实现代码
2020/08/27 Javascript
jQuery中trigger()与bind()用法分析
2015/12/18 Javascript
JS、jQuery中select的用法详解
2016/04/21 Javascript
jQuery选择器及jquery案例详解(必看)
2016/05/20 Javascript
jQuery Chart图表制作组件Highcharts用法详解
2016/06/01 Javascript
使用Bootstrap typeahead插件实现搜索框自动补全的方法
2016/07/07 Javascript
javascript封装addLoadEvent实现页面同时加载执行多个函数的方法
2016/07/25 Javascript
微信小程序 框架详解及实例应用
2016/09/26 Javascript
jquery 实时监听输入框值变化的完美方法(必看)
2017/01/26 Javascript
python批量生成本地ip地址的方法
2015/03/23 Python
理解Python垃圾回收机制
2016/02/12 Python
Python标准库笔记struct模块的使用
2018/02/22 Python
如何利用Boost.Python实现Python C/C++混合编程详解
2018/11/08 Python
使用50行Python代码从零开始实现一个AI平衡小游戏
2018/11/21 Python
Python安装selenium包详细过程
2019/07/23 Python
Python实现Singleton模式的方式详解
2019/08/08 Python
PYTHON EVAL的用法及注意事项解析
2019/09/06 Python
Pytorch在NLP中的简单应用详解
2020/01/08 Python
如何用python免费看美剧
2020/08/11 Python
Kipling凯浦林美国官网:世界著名时尚休闲包袋品牌
2016/08/24 全球购物
美国最大点评网站:Yelp
2018/02/14 全球购物
JSF面试题:如何管量web层中的Bean,用什么标签。如何通过jsp页面与Bean绑定在一起进行处理?
2012/10/05 面试题
师范毕业生求职信
2014/07/11 职场文书
公司股份合作协议书
2014/12/07 职场文书
会议简报格式范文
2015/07/20 职场文书
pytorch 带batch的tensor类型图像显示操作
2021/05/20 Python
MySQL 亿级数据导入导出及迁移笔记
2021/06/18 MySQL
R9700摩机记
2022/04/05 无线电
MySQL分布式恢复进阶
2022/07/23 MySQL