uniapp监听扫码枪键盘事件|无输入框式监听

一般的扫码枪通过USB或蓝牙连接手机或电脑,充当的是一个外接设备。当扫码后,扫码枪会自动识别内容,然后向连接的电脑或手机发送键盘事件keydown或keyup。

input输入框式

如果页面上有input输入框就很简单,直接聚焦input,然后扫码,input框会自动填充内容,并自动产生回车事件,代码只需处理回车事件即可。

<template>
    <input v-model="inputString" @confirm="onConfirm" />
</template>

<script setup>
import { ref } from "vue"
const inputString = ref("")
const onConfirm = () => {
    console.log('输入的值为', inputString.value)
}
</script>

以上代码,h5、App都适用。

无输入框式

没有input框时,就需要监听页面的键盘事件。h5可以使用document.keyup来监听,但是app里没有document,只能使用plus.key来监听。处理逻辑一样,只是监听方式不一样。

同时兼容H5和APP的用法

<template>
    <view>监听到的内容:{{inputString}}</view>
</template>

<script setup>
import { ref } from "vue"
import { onLoad, onShow, onHide, onBackPress, onUnload } from "@dcloudio/uni-app";
const inputString = ref('')
const keyCodeCache = ref([])
const inputCache = ref('')
const onConfirm = (code)=>{
    console.log('拿到的code', code);
    // 此处写我们自己的逻辑
}
const keypress = (e) => {
    if (e.keyCode === 66 || e.key =='Enter') {
        inputString.value = inputCache.value;
        onConfirm(inputString.value)
        inputCache.value = '';
    } else {
        inputCache.value += e.key
    }
}


onLoad((options) => {
    // #ifdef APP-PLUS
    plus.key.addEventListener("keyup", keypress);
    // #endif 
    // #ifdef H5
    document.addEventListener("keyup", keypress);
    // #endif
})
onUnload(()=>{
    // #ifdef APP-PLUS
    plus.key.removeEventListener("keyup", keypress);
    // #endif
    // #ifdef H5
    document.removeEventListener("keyup", keypress);
    // #endif
})
onHide(()=>{
    // #ifdef APP-PLUS
    plus.key.removeEventListener("keyup", keypress);
    // #endif
    // #ifdef H5
    document.removeEventListener("keyup", keypress);
    // #endif
})
onBackPress(()=>{
    // #ifdef APP-PLUS
    plus.key.removeEventListener("keyup", keypress);
    // #endif
    // #ifdef H5
    document.removeEventListener("keyup", keypress);
    // #endif
})
</script>

实际运行时,可能出现键盘的key和keyCode不兼容问题,不同的设备对应的键盘keyCode可能也不一样,首先要设置扫码枪的键盘模式,然后做一层转换。
下面的扫码枪设置为US Keyboard的转换部分逻辑

import keymap from './keymap'
const keypress = (e) => {
    if (e.keyCode === 66 || e.key =='Enter') {
        inputString.value = inputCache.value;
        inputCache.value = '';
        onConfirm(inputString.value)
    } else {
        inputCache.value += keymap[e.keyCode] || ''
    }
}
// keymap.js 以下来源网络收集,不同的设备对应的keyCode可能不同
export default {
	"7": "0",
	"8": "1",
	"9": "2",
	"10": "3",
	"11": "4",
	"12": "5",
	"13": "6",
	"14": "7",
	"15": "8",
	"16": "9",
	"29": "A",
	"30": "B",
	"31": "C",
	"32": "D",
	"33": "E",
	"34": "F",
	"35": "G",
	"36": "H",
	"37": "I",
	"38": "J",
	"39": "K",
	"40": "L",
	"41": "M",
	"42": "N",
	"43": "O",
	"44": "P",
	"45": "Q",
	"46": "R",
	"47": "S",
	"48": "T",
	"49": "U",
	"50": "V",
	"51": "W",
	"52": "X",
	"53": "Y",
	"54": "Z",
	"55": ",",
	"56": ".",
	"59": "",
	"69": "-",
	"70": "=",
	"81": "+"
}
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Uniapp是一款基于Vue.js框架开发的跨平台应用开发框架,可以实现一套代码同时运行在多个平台,包括iOS、Android、H5等。在Uniapp中,要实现扫码广播事件的接受,需要进行以下步骤: 1. 首先,在uni-app的项目中安装相关的npm包。可以通过在终端中运行以下命令进行安装: ``` npm install --save zxing ``` 2. 在需要接受扫码广播事件的页面,引入相关的包和组件。在页面的script标签中添加以下代码: ```javascript import { BarcodeFormat, zxing } from 'zxing'; export default { data() { return { zxing: null }; }, mounted() { this.initScanner(); }, methods: { initScanner() { const hintSet = new zxing.EnumSet(BarcodeFormat, BarcodeFormat.QR_CODE); this.zxing = new zxing.MultiFormatReader(); this.zxing.setHints(hintSet); // 监听扫码事件 this.$refs.qrCodeScanner.addEventListener('change', this.handleScan); }, handleScan(event) { // 处理扫码结果 const buffer = new Uint8Array(event.data.buffer); const luminanceSource = new zxing.LuminanceSource(buffer, event.width, event.height); const binaryBitmap = new zxing.BinaryBitmap(new zxing.HybridBinarizer(luminanceSource)); const result = this.zxing.decode(binaryBitmap); // 扫码结果处理 console.log(result.getText()); } } } ``` 3. 在页面的template标签中,添加用来接收扫码广播事件的元素,例如: ```html <canvas ref="qrCodeScanner"></canvas> ``` 通过以上步骤,就可以实现在Uniapp中接受扫码广播事件。对于扫描到的二维码内容,可以根据实际需求进行处理,例如展示到页面上或者与后端进行交互。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值