浅谈在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 相关文章推荐
js保留两位小数使用toFixed实现
Jul 29 Javascript
js取两个数组的交集|差集|并集|补集|去重示例代码
Aug 07 Javascript
Bootstrap 粘页脚效果
Mar 28 Javascript
12个非常实用的JavaScript小技巧【推荐】
May 18 Javascript
jQuery EasyUI tree 使用拖拽时遇到的错误小结
Oct 10 Javascript
js 判断数据类型的几种方法
Jan 13 Javascript
jQuery插件imgAreaSelect基础讲解
May 26 jQuery
vue 2.0 购物车小球抛物线的示例代码
Feb 01 Javascript
基于vue cli 通过命令行传参实现多环境配置
Jul 12 Javascript
微信运维交互机器人的示例代码
Nov 12 Javascript
js Array.slice的8种不同用法示例
Jul 10 Javascript
JS数组索引检测中的数据类型问题详解
Jan 11 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文本操作类
2006/11/25 PHP
PHP连接MySQL的2种方法小结以及防止乱码
2014/03/11 PHP
php自动更新版权信息显示的方法
2015/06/19 PHP
PHP ElasticSearch做搜索实例讲解
2020/02/05 PHP
jQuery中$.ajax()和$.getJson()同步处理详解
2015/08/12 Javascript
js淡入淡出焦点图幻灯片效果代码分享
2015/09/08 Javascript
jQuery实现按钮点击遮罩加载及处理完后恢复的效果
2016/06/07 Javascript
Vue.js路由组件vue-router使用方法详解
2016/12/02 Javascript
解决Linux无法正常安装与卸载Node.js的方法
2018/01/19 Javascript
微信小程序点餐系统开发常见问题汇总
2019/08/06 Javascript
vue实现点击按钮下载文件功能
2019/10/11 Javascript
Vue.js实现大屏数字滚动翻转效果
2019/11/29 Javascript
非常漂亮的js烟花效果
2020/03/10 Javascript
Python pymongo模块用法示例
2018/03/31 Python
Flask框架实现给视图函数增加装饰器操作示例
2018/07/16 Python
django搭建项目配置环境和创建表过程详解
2019/07/22 Python
pycharm运行程序时看不到任何结果显示的解决
2020/02/21 Python
pandas使用之宽表变窄表的实现
2020/04/12 Python
python3.7+selenium模拟淘宝登录功能的实现
2020/05/26 Python
Python小白不正确的使用类变量实例
2020/05/29 Python
keras自定义损失函数并且模型加载的写法介绍
2020/06/15 Python
python中Django文件上传方法详解
2020/08/05 Python
python3中编码获取网页的实例方法
2020/11/16 Python
Html5 localStorage入门教程
2018/04/26 HTML / CSS
沙特阿拉伯网上购物:Sayidaty Mall
2018/05/06 全球购物
Qoo10台湾站:亚洲领先的在线市场
2018/05/15 全球购物
英国网上购买门:Direct Doors
2018/06/07 全球购物
什么是lambda函数
2013/09/17 面试题
家长给小学生的评语
2014/01/30 职场文书
参观接待方案
2014/03/17 职场文书
物业品质提升方案
2014/06/08 职场文书
科技工作者先进事迹
2014/08/16 职场文书
2014法院干警廉洁警示教育思想汇报
2014/09/13 职场文书
四风问题对照检查材料整改措施
2014/09/27 职场文书
公安局班子个人对照检查材料思想汇报
2014/10/09 职场文书
小学思想品德教学反思
2016/02/24 职场文书