浅谈在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 操作下拉列表框实现代码
Feb 22 Javascript
jquery实现手风琴效果
Nov 20 Javascript
jQuery的Ajax用户认证和注册技术实例教程(附demo源码)
Dec 08 Javascript
JavaScript导航脚本判断当前导航
Jul 12 Javascript
学习vue.js中class与style绑定
Dec 03 Javascript
Bootstrap3 datetimepicker控件使用实例
Dec 13 Javascript
JavaScript数组去重的6个方法
Jan 21 Javascript
Angular2 路由问题修复详解
Mar 01 Javascript
jquery dataTable 获取某行数据
May 05 jQuery
详解AngularJS跨页面传值(ui-router)
Aug 23 Javascript
一个Vue视频媒体多段裁剪组件的实现示例
Aug 09 Javascript
JavaScript的词法结构精华篇
Oct 17 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
《雄兵连》《烈阳天道》真的来了
2020/07/13 国漫
Access数据库导入Mysql的方法之一
2006/10/09 PHP
PHP判断远程图片或文件是否存在的实现代码
2014/02/20 PHP
php进行支付宝开发中return_url和notify_url的区别分析
2014/12/22 PHP
jQuery学习笔记 操作jQuery对象 文档处理
2012/09/19 Javascript
node.js中的fs.linkSync方法使用说明
2014/12/15 Javascript
原生Js实现简易烟花爆炸效果的方法
2015/03/20 Javascript
浅析Bootstrap缩略图组件与警示框组件
2016/04/29 Javascript
JS 通过系统时间限定动态添加 select option的实例代码
2016/06/09 Javascript
JS传值出现中文参数乱码的解决方法
2016/06/30 Javascript
利用nodejs监控文件变化并使用sftp上传到服务器
2017/02/18 NodeJs
详解Vue生命周期的示例
2017/03/10 Javascript
ES6生成器用法实例分析
2017/04/10 Javascript
Bootstrap + AngularJS 实现简单的数据过滤字符查找功能
2017/07/27 Javascript
js tab栏切换代码实例解析
2019/09/03 Javascript
javascript实现异形滚动轮播
2019/11/28 Javascript
微信小程序封装多张图片上传api代码实例
2019/12/30 Javascript
vue+vuex+axios从后台获取数据存入vuex,组件之间共享数据操作
2020/07/31 Javascript
启动targetcli时遇到错误解决办法
2017/10/26 Python
python 简单搭建阻塞式单进程,多进程,多线程服务的实例
2017/11/01 Python
flask-restful使用总结
2018/12/04 Python
Python程序包的构建和发布过程示例详解
2019/06/09 Python
python实现月食效果实例代码
2019/06/18 Python
PyCharm 2020 激活到 2100 年的教程
2020/03/25 Python
将pymysql获取到的数据类型是tuple转化为pandas方式
2020/05/15 Python
基于python获取本地时间并转换时间戳和日期格式
2020/10/27 Python
Django 用户认证Auth组件的使用
2020/11/30 Python
美国婴儿用品及配件购买网站:Munchkin
2019/04/03 全球购物
屈臣氏俄罗斯在线商店:Watsons俄罗斯
2020/08/03 全球购物
护士演讲稿范文
2014/01/05 职场文书
个人遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
警察群众路线整改措施
2014/09/26 职场文书
详解Go语言Slice作为函数参数的使用
2021/07/02 Golang
SQL CASE 表达式的具体使用
2022/03/21 SQL Server
利用uni-app生成微信小程序的踩坑记录
2022/04/05 Javascript
阿里面试Nacos配置中心交互模型是push还是pull原理解析
2022/07/23 Java/Android