浅谈在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实现图片滚动效果的简单实例
Nov 23 Javascript
使用jQuery中的when实现多个AJAX请求对应单个回调的例子分享
Apr 23 Javascript
jQuery获取及设置表单input各种类型值的方法小结
May 24 Javascript
Node.js环境下编写爬虫爬取维基百科内容的实例分享
Jun 12 Javascript
Webpack+Vue如何导入Jquery和Jquery的第三方插件
Feb 20 Javascript
Vue2递归组件实现树形菜单
Apr 10 Javascript
Vue.js 单页面多路由区域操作的实例详解
Jul 17 Javascript
Easy UI动态树点击文字实现展开关闭功能
Sep 30 Javascript
angular 未登录状态拦截路由跳转的方法
Oct 09 Javascript
在element-ui的el-tree组件中用render函数生成el-button的实例代码
Nov 05 Javascript
微信小程序实现复选框效果
Dec 28 Javascript
JS错误处理与调试操作实例分析
Apr 13 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插件 Simple HTML DOM 用DOM方式处理HTML
2013/07/01 PHP
php把session写入数据库示例
2014/02/26 PHP
PHP使用strtotime获取上个月、下个月、本月的日期
2015/12/30 PHP
php版微信自定义回复功能示例
2016/12/05 PHP
实例讲解YII2中多表关联的使用方法
2017/07/21 PHP
PHP配合fiddler抓包抓取微信指数小程序数据的实现方法分析
2020/01/02 PHP
在线编辑器中换行与内容自动提取
2009/04/24 Javascript
mysql输出数据赋给js变量报unterminated string literal错误原因
2010/05/22 Javascript
JavaScript动态添加列的方法
2015/03/25 Javascript
快速获取/设置iframe内对象元素的几种js实现方法
2016/05/20 Javascript
JavaScript必知必会(六) delete in instanceof
2016/06/08 Javascript
Bootstrap Validator 表单验证
2016/07/25 Javascript
Vue集成Iframe页面的方法示例
2017/12/12 Javascript
vue使用中的内存泄漏【推荐】
2018/07/10 Javascript
使用 electron 实现类似新版 QQ 的登录界面效果(阴影、背景动画、窗体3D翻转)
2018/10/23 Javascript
IE11下处理Promise及Vue的单项数据流问题
2019/07/24 Javascript
JavaScript如何获取一个元素的样式信息
2019/07/29 Javascript
vue路由传参页面刷新参数丢失问题解决方案
2019/10/08 Javascript
python基础教程之基本内置数据类型介绍
2014/02/20 Python
Swift 3.0在集合类数据结构上的一些新变化总结
2016/07/11 Python
Python编程之变量赋值操作实例分析
2017/07/24 Python
用Pygal绘制直方图代码示例
2017/12/07 Python
详解TensorFlow查看ckpt中变量的几种方法
2018/06/19 Python
对python 自定义协议的方法详解
2019/02/13 Python
Django如何防止定时任务并发浅析
2019/05/14 Python
python控制台实现tab补全和清屏的例子
2019/08/20 Python
Python使用uuid库生成唯一标识ID
2020/02/12 Python
Tensorflow tf.nn.depthwise_conv2d如何实现深度卷积的
2020/04/20 Python
Nginx+Uwsgi+Django 项目部署到服务器的思路详解
2020/05/08 Python
Python Django搭建网站流程图解
2020/06/13 Python
瑞典Happy Socks美国官网:购买色彩斑斓的快乐袜子
2016/10/19 全球购物
美津浓美国官网:Mizuno美国
2018/08/07 全球购物
Ajax和javascript的区别
2013/07/20 面试题
经典洗发水广告词
2014/03/13 职场文书
奥巴马经典演讲稿
2014/09/13 职场文书
MSSQL基本语法操作
2022/04/11 SQL Server