vue3+h5实现扫描条形码&二维码功能

前提

由于涉及到调用手机摄像头,涉及到隐私,必须在HTTPS环境使用。

重点说明

在手机端使用,PC端使用会报错获取信息失败。

一、下载插件

下载html5-qrcode插件

yarn add html5-qrcode
或
npm i html5-qrcode

在这里插入图片描述

二、使用demo

<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服务器上进行访问测试即可

  • 9
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值