赞
踩
由于涉及到调用手机摄像头,涉及到隐私,必须在HTTPS环境使用。
在手机端使用,PC端使用会报错获取信息失败。
下载html5-qrcode插件
yarn add html5-qrcode
或
npm i html5-qrcode
<template> <div class="container"> <div id="reader"></div> </div> <button @click="getCameras">扫码</button> <span>{{ result }}</span> </template> <script setup> import { onMounted, ref, onUnmounted } from 'vue' import { Html5Qrcode } from 'html5-qrcode' import { showToast } from 'vant'; const cameraId = ref('') const devicesInfo = ref('') const html5QrCode = ref(null) const result = ref('') onMounted(() => { // getCameras() }) onUnmounted(() => { stop() }) const getCameras = () => { Html5Qrcode.getCameras() .then((devices) => { console.log('摄像头信息', devices) showToast('摄像头信息', devices) if (devices && devices.length) { // 如果有2个摄像头,1为前置的 if (devices.length > 1) { cameraId.value = devices[1].id } else { cameraId.value = devices[0].id } devicesInfo.value = devices // start开始扫描 start() } }) .catch((err) => { // handle err console.log('获取设备信息失败', err) // 获取设备信息失败 showToast('获取设备信息失败') }) } const start = () => { html5QrCode.value = new Html5Qrcode('reader') console.log('html5QrCode', html5QrCode) html5QrCode.value.start( cameraId.value, { fps: 10, // 设置每秒多少帧 qrbox: { width: 250, height: 250 } // 设置取景范围 }, (decodedText, decodedResult) => { console.log('扫描的结果', decodedText, decodedResult) showToast('扫描的结果===', decodedText, decodedResult) result.value = decodedText if (decodedText) { stop(); } }, (errorMessage) => { showToast('暂无扫描结果') console.log('暂无扫描结果', errorMessage) } ) .catch((err) => { console.log(`Unable to start scanning, error: ${err}`) }) } const stop = () => { html5QrCode.value .stop() .then((ignore) => { // QR Code scanning is stopped. console.log('QR Code scanning stopped.', ignore) showToast('QR Code scanning stopped.') }) .catch((err) => { // Stop failed, handle it. console.log('Unable to stop scanning.', err) showToast('Unable to stop scanning.') }) } </script> <style scoped> .container { position: relative; height: 80%; width: 100%; background: rgba(#000000, 0.48); } #reader { top: 50%; left: 0; transform: translateY(-50%); } </style>
项目打包放到HTTPS服务器上进行访问测试即可
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。