浅谈在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插件源码
Jun 24 Javascript
js实现点击链接后窗口缩小并居中的方法
Mar 02 Javascript
jquery实现页面百叶窗走马灯式翻滚显示效果的方法
Mar 12 Javascript
window.setInterval()方法的定义和用法及offsetLeft与style.left的区别
Nov 11 Javascript
jQuery实现的多张图无缝滚动效果【测试可用】
Sep 12 Javascript
Vue-router 切换组件页面时进入进出动画方法
Sep 01 Javascript
浅谈angularJs函数的使用方法(大小写转换,拷贝,扩充对象)
Oct 08 Javascript
VUE的history模式下除了index外其他路由404报错解决办法
Aug 21 Javascript
JavaScript实现简单计算器
Mar 19 Javascript
js事件机制----捕获与冒泡机制实例分析
May 22 Javascript
JS猜数字游戏实例讲解
Jun 30 Javascript
JavaScript原生数组函数实例汇总
Oct 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
php随机生成数字字母组合的方法
2015/03/18 PHP
php检查页面是否被百度收录
2015/10/28 PHP
WordPress中给文章添加自定义字段及后台编辑功能区域
2015/12/19 PHP
PHP数据库编程之MySQL优化策略概述
2017/08/16 PHP
select 控制网页内容隐藏于显示的实现代码
2010/05/25 Javascript
js 获取class的元素的方法 以及创建方法getElementsByClassName
2013/03/11 Javascript
设置checkbox为只读(readOnly)的两种方式
2013/10/11 Javascript
JavaScript中的异常捕捉介绍
2014/12/31 Javascript
简单介绍JavaScript中字符串创建的基本方法
2015/07/07 Javascript
轻松学习jQuery插件EasyUI EasyUI表单验证
2015/12/01 Javascript
javascript容错处理代码(屏蔽js错误)
2017/01/20 Javascript
JavaScript 函数节流详解及方法总结
2017/02/09 Javascript
微信小程序云开发之新手环境配置
2019/05/16 Javascript
在 Vue 应用中使用 Netlify 表单功能的方法详解
2019/06/03 Javascript
JS获取表格视图所选行号的ids过程解析
2020/02/21 Javascript
使用python绘制人人网好友关系图示例
2014/04/01 Python
Python列表计数及插入实例
2014/12/17 Python
Python3.2中Print函数用法实例详解
2015/05/19 Python
Python实现的远程登录windows系统功能示例
2018/06/21 Python
Python对象转换为json的方法步骤
2019/04/25 Python
基于python检查SSL证书到期情况代码实例
2020/04/04 Python
使用html5+css3来实现slider切换效果告别javascript+css
2013/01/08 HTML / CSS
viagogo法国票务平台:演唱会、体育比赛、戏剧门票
2017/03/27 全球购物
美国网上眼镜供应商:LEOTONY(眼镜、RX太阳镜和太阳镜)
2017/10/31 全球购物
美国婚礼礼品网站:MyWeddingFavors
2018/09/26 全球购物
英国名牌服装购物网站:OD’s Designer
2019/09/02 全球购物
统计每一学生的平均成绩
2014/06/06 面试题
上班看电影检讨书
2014/02/12 职场文书
2014迎新年晚会策划方案
2014/02/23 职场文书
汽车机修工岗位职责
2014/03/06 职场文书
推广普通话标语
2014/06/27 职场文书
毕业生自荐材料范文
2014/12/30 职场文书
一年级语文上册复习计划
2015/01/17 职场文书
作弊检讨书
2015/01/27 职场文书
2015年普法依法治理工作总结
2015/05/26 职场文书
2015年秋季运动会前导词
2015/07/20 职场文书