VUE实现无需输入框无焦点,网页监听扫码枪并且获取结果
vue
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
项目地址:https://gitcode.com/gh_mirrors/vu/vue
免费下载资源
·
原理
扫码枪本质就是一个快速输入+回车(注意:扫码输入法要设置英文,不然会乱码)
全局安装
import scanner from './install';
Vue.use(scanner);
使用
export default {
data () {
return {
items:[], //扫码结果
isStart:false //是否开启扫码
}
},
mounted(){
this.startScannerHandler();
},
methods:{
startScannerHandler(){
if(!this.isStart){
this._scanner=this.$scanner({callback:v=>{
this.items.push(v);
}});
}else{
this._scanner.cancel();
}
this.isStart=!this.isStart;
}
}
}
创建install.js
export default {
install(Vue) {
Vue.prototype.$scanner = function (options) {
var _this = this;
if (_this._callback) {
return;
}
var opt = Object.assign({
delay: 1000, // 时间太短会还没输入完成,根据测试情况修改
endChar: 'Enter',
callback: null
}, options)
var fn = {
cancel: function () {
if (_this._callback)
document.documentElement.removeEventListener('keypress', _this._callback);
delete _this._callback;
}
};
_this._callback = function (e) {
var result = _this._result || '';
var _start = _this._start || new Date();
var now = new Date();
if ((now.getTime() - _start.getTime()) > opt.delay) {
_start = now;
result = '';
}
var keyVal = `${String.fromCharCode(e.which)}`;
if (e.key == opt.endChar) {
_this._result = '';
opt.callback && opt.callback(result);
return;
}
result += keyVal;
_this._result = result;
_this._start = _start;
};
document.documentElement.addEventListener('keypress', _this._callback);
return fn;
};
}
};
GitHub 加速计划 / vu / vue
207.54 K
33.66 K
下载
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
最近提交(Master分支:2 个月前 )
73486cb5
* chore: fix link broken
Signed-off-by: snoppy <michaleli@foxmail.com>
* Update packages/template-compiler/README.md [skip ci]
---------
Signed-off-by: snoppy <michaleli@foxmail.com>
Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com> 4 个月前
e428d891
Updated Browser Compatibility reference. The previous currently returns HTTP 404. 5 个月前
更多推荐
已为社区贡献2条内容
所有评论(0)