移动端如何在前端阻止input框获得焦点时手机键盘的弹出(实现仅能扫码枪读入数据,禁止手输)
思路一、通过判断键盘按下弹起的时间差判断是否人为输入
一开始思路是想判别一下是人为输入还是扫码枪扫码输入,如果是人为输入则弹出提示并清空输入框内容
但是pc端时间差是100左右,移动端是15左右,接近扫码枪输入的速度,无法进行判别,只能另换一种思路
(鄙人技术浅薄不知道是什么原因,希望有大佬给我指点迷津)
思路二、直接禁止用户掉起键盘
参考了这篇文章,并稍做改进
(172条消息) 移动端如何在前端阻止input框获得焦点时手机键盘的弹出_移动端输入框自动获取焦点时禁止弹起键盘_雪松~的博客-CSDN博客
- 刚点击时输入框变为只读,就不掉起键盘了,然后再让只读属性为false,焦点又回来了
·
- 用户点击输入框时,先让输入框失焦,跳出提示,再让输入框聚焦,此时又调用上1的方法,禁止掉起键盘
- 禁止用户复制粘贴剪切
1.效果
2.代码
<van-field v-model="inputCode" type="password" label="" placeholder="扫码自动填入巡检码" ref="inputCode" @keydown="getDown"
@keyup="getUp" @input="onChange" @focus="onfocus" :readonly="isRead"
@click="stopKeyborad" oncut="return false" onpaste="return false" oncopy="return false"/>
// 点击巡检码输入框
stopKeyborad() {
this.$nextTick(() => {
this.$refs.inputCode.blur();
Dialog.confirm({
title: '注意!!',
message: '请勿手动输入巡检码',
})
.then(() => {
// on confirm
this.$refs.inputCode.focus();
})
.catch(() => {
// on cancel
this.$refs.inputCode.focus();
});
});
},
// 巡检码输入框获取焦点
onfocus() {
this.isRead = true
setTimeout(() => {
this.isRead = false
}, 200);
},
转载自:https://juejin.cn/post/7215095268610359352