当前位置:首页 > VUE

vue实现扫描二维码

2026-02-09 09:08:32VUE

Vue 实现扫描二维码的方法

在 Vue 项目中实现二维码扫描功能,可以通过以下方法完成:

使用 vue-qrcode-reader

vue-qrcode-reader 是一个专为 Vue 设计的二维码扫描库,基于 WebRTC 实现摄像头调用。

安装依赖:

vue实现扫描二维码

npm install vue-qrcode-reader

组件示例:

<template>
  <div>
    <qrcode-stream @decode="onDecode"></qrcode-stream>
    <p>扫描结果: {{ result }}</p>
  </div>
</template>

<script>
import { QrcodeStream } from 'vue-qrcode-reader'

export default {
  components: { QrcodeStream },
  data() {
    return {
      result: ''
    }
  },
  methods: {
    onDecode(decodedString) {
      this.result = decodedString
    }
  }
}
</script>

使用 zxing-js/library

纯 JavaScript 解决方案,适合需要更多自定义控制的场景。

vue实现扫描二维码

安装依赖:

npm install @zxing/library

实现代码:

<template>
  <div>
    <video ref="video" width="300" height="200"></video>
    <button @click="startScan">开始扫描</button>
    <p>结果: {{ scanResult }}</p>
  </div>
</template>

<script>
import { BrowserQRCodeReader } from '@zxing/library'

export default {
  data() {
    return {
      codeReader: null,
      scanResult: ''
    }
  },
  mounted() {
    this.codeReader = new BrowserQRCodeReader()
  },
  methods: {
    async startScan() {
      try {
        const result = await this.codeReader.decodeFromInputVideoDevice(
          undefined,
          this.$refs.video
        )
        this.scanResult = result.text
      } catch (err) {
        console.error(err)
      }
    }
  }
}
</script>

移动端适配方案

对于移动端浏览器,需要考虑权限处理和响应式布局:

<template>
  <div class="scanner-container">
    <qrcode-stream
      @decode="onDecode"
      :paused="paused"
      @init="onInit"
    ></qrcode-stream>
  </div>
</template>

<script>
import { QrcodeStream } from 'vue-qrcode-reader'

export default {
  components: { QrcodeStream },
  data() {
    return {
      paused: false,
      error: ''
    }
  },
  methods: {
    onDecode(result) {
      this.paused = true
      // 处理扫描结果
    },
    async onInit(promise) {
      try {
        await promise
      } catch (error) {
        if (error.name === 'NotAllowedError') {
          this.error = '请允许摄像头访问权限'
        } else if (error.name === 'NotFoundError') {
          this.error = '未检测到可用摄像头'
        }
      }
    }
  }
}
</script>

<style>
.scanner-container {
  width: 100%;
  max-width: 500px;
  margin: 0 auto;
}
</style>

注意事项

  • 确保在 HTTPS 环境下使用,现代浏览器要求安全上下文才能访问摄像头
  • 处理用户拒绝摄像头权限的情况
  • 移动端注意横竖屏适配问题
  • 扫描区域大小会影响识别成功率,建议不小于 300x300 像素

以上方法可根据项目需求选择,vue-qrcode-reader 提供了更简单的集成方式,而 zxing-js 则提供更多底层控制。

标签: 二维码vue
分享给朋友:

相关文章

实现 vue ssr

实现 vue ssr

Vue SSR 实现方法 Vue SSR(Server-Side Rendering)通过服务器端渲染 Vue 应用,提升首屏加载速度和 SEO 友好性。以下是核心实现方法: 基础配置 安装必要依赖…

computed vue 实现

computed vue 实现

computed 在 Vue 中的基本用法 Vue 的 computed 属性用于声明依赖于其他数据的计算属性。当依赖的数据变化时,计算属性会自动重新计算并缓存结果。 export defaul…

vue实现粘贴

vue实现粘贴

Vue 实现粘贴功能的方法 在 Vue 中实现粘贴功能通常涉及监听粘贴事件并处理剪贴板数据。以下是几种常见的实现方式: 监听原生粘贴事件 通过 @paste 指令或原生 addEventListen…

vue实现ios

vue实现ios

Vue 实现 iOS 风格应用 使用 Vue 实现 iOS 风格的应用,可以通过结合 UI 框架和自定义样式来达成目标。以下是具体方法和步骤: 选择 iOS 风格的 UI 框架 Vue 生态中有多…

vue实现编辑

vue实现编辑

Vue 实现编辑功能 在 Vue 中实现编辑功能通常涉及表单绑定、状态管理和事件处理。以下是一个常见的实现方法: 双向数据绑定 使用 v-model 指令实现表单元素与数据的双向绑定: <i…

vue实现白板

vue实现白板

Vue实现白板功能 使用Vue实现白板功能可以通过HTML5的Canvas API结合Vue的响应式特性来完成。以下是实现白板功能的关键步骤: 安装依赖 在Vue项目中安装必要的依赖,如vue-dr…