浅谈在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分页函数代码
Sep 10 Javascript
jQuery实现的原图对比窗帘效果
Jun 15 Javascript
jquery中实现时间戳与日期相互转换
Apr 12 Javascript
jQuery调用Webservice传递json数组的方法
Aug 06 Javascript
jQuery实现可展开折叠的导航效果示例
Sep 12 Javascript
AngularJS学习第一篇 AngularJS基础知识
Feb 13 Javascript
Node.js中DNS模块学习总结
Feb 28 Javascript
Vue.js点击切换按钮改变内容的实例讲解
Aug 22 Javascript
最简单的JS实现json转csv的方法
Jan 10 Javascript
JS实现数组去重,显示重复元素及个数的方法示例
Jan 21 Javascript
javascript实现弹出层效果
Dec 10 Javascript
ant-design-vue 快速避坑指南(推荐)
Jan 21 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的autoload自动加载机制使用说明
2010/12/28 PHP
PHP容易被忽略而出错陷阱 数字与字符串比较
2011/11/10 PHP
php实现信用卡校验位算法THE LUHN MOD-10示例
2014/05/07 PHP
PHP获取文件扩展名的常用方法小结【五种方式】
2018/04/27 PHP
PHP+MariaDB数据库操作基本技巧备忘总结
2018/05/21 PHP
Javascript中自动切换焦点实现代码
2012/12/15 Javascript
用js实现输入提示(自动完成)的实例代码
2013/06/14 Javascript
js实现快速分享功能(你的文章分享工具)
2013/06/25 Javascript
jquery 实现返回顶部功能
2014/11/17 Javascript
Javascript常用字符串判断函数代码分享
2014/12/08 Javascript
jQuery on()方法示例及jquery on()方法的优点
2015/08/27 Javascript
js下将金额数字每三位一逗号分隔
2016/02/19 Javascript
js 获取站点应用名的简单实例
2016/08/18 Javascript
vue通过点击事件读取音频文件的方法
2018/05/30 Javascript
javascript中的event loop事件循环详解
2018/12/14 Javascript
利用不到200行代码写一款属于你自己的js类库
2019/07/08 Javascript
js模拟实现烟花特效
2020/03/10 Javascript
Vue使用CDN引用项目组件,减少项目体积的步骤
2020/10/30 Javascript
搭建Python的Django框架环境并建立和运行第一个App的教程
2016/07/02 Python
python+selenium开发环境搭建图文教程
2017/08/11 Python
Python中装饰器学习总结
2018/02/10 Python
Python实现的文本对比报告生成工具示例
2018/05/22 Python
python实现矩阵打印
2019/03/02 Python
python flask安装和命令详解
2019/04/02 Python
20行python代码的入门级小游戏的详解
2019/05/05 Python
深入浅析Python代码规范性检测
2020/07/31 Python
CSS3混合模式mix-blend-mode/background-blend-mode简介
2018/03/15 HTML / CSS
父亲的菜园教学反思
2014/02/13 职场文书
畜牧兽医本科生的自我评价
2014/03/03 职场文书
行政秘书工作自我鉴定
2014/09/15 职场文书
房屋认购协议书
2015/01/29 职场文书
防汛通知
2015/04/25 职场文书
2015年会计年终工作总结
2015/05/26 职场文书
2019事业单位个人工作总结范文
2019/08/26 职场文书
MongoDB使用profile分析慢查询的步骤
2021/04/30 MongoDB
TaiShan 200服务器安装Ubuntu 18.04的图文教程
2022/06/28 Servers