当前位置:首页 > VUE

vue实现扫描二维码

2026-03-26 17:38:14VUE

Vue 实现扫描二维码功能

安装二维码扫描库

推荐使用 vue-qrcode-reader 库,它基于 jsQRInstascan,支持在 Vue 项目中快速集成二维码扫描功能。安装命令如下:

npm install vue-qrcode-reader

基础实现代码

在 Vue 组件中引入 QrcodeStreamQrcodeCapture 组件,分别用于实时扫描和静态图片解析。

<template>
  <div>
    <!-- 实时扫描 -->
    <qrcode-stream @decode="onDecode" :paused="paused"></qrcode-stream>
    <p>扫描结果: {{ decodedContent }}</p>

    <!-- 图片解析 -->
    <qrcode-capture @decode="onDecode"></qrcode-capture>
    <input type="file" @change="onFileUpload">
  </div>
</template>

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

export default {
  components: { QrcodeStream, QrcodeCapture },
  data() {
    return {
      decodedContent: '',
      paused: false
    };
  },
  methods: {
    onDecode(content) {
      this.decodedContent = content;
      this.paused = true; // 扫描成功后暂停
    },
    onFileUpload(event) {
      const file = event.target.files[0];
      if (file) {
        const img = new Image();
        img.src = URL.createObjectURL(file);
        // 图片解析逻辑由 QrcodeCapture 自动处理
      }
    }
  }
};
</script>

自定义扫描界面

通过 CSS 和插槽自定义扫描框样式:

<qrcode-stream @decode="onDecode">
  <div class="scan-overlay">对准二维码</div>
</qrcode-stream>

<style>
.scan-overlay {
  position: absolute;
  width: 80%;
  height: 200px;
  border: 2px dashed #fff;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
</style>

错误处理

监听 error 事件处理摄像头权限或兼容性问题:

<qrcode-stream @error="onError"></qrcode-stream>

methods: {
  onError(error) {
    console.error('摄像头错误:', error.name);
    if (error.name === 'NotAllowedError') {
      alert('请授予摄像头权限');
    }
  }
}

移动端适配

在移动端需注意:

  • 添加 user-select: none 防止长按误触
  • 通过 @init 事件检查后置摄像头支持:
    
    <qrcode-stream @init="onInit"></qrcode-stream>

methods: { onInit(promise) { promise.then(() => { console.log('摄像头初始化成功'); }).catch(error => { alert('移动端需启用摄像头权限'); }); } }

vue实现扫描二维码


#### 替代方案

如果遇到兼容性问题,可改用纯 JavaScript 库如 `jsQR`:
```javascript
import jsQR from 'jsqr';

function scanWithJsQR(imageData) {
  const code = jsQR(imageData.data, imageData.width, imageData.height);
  if (code) {
    console.log('解码结果:', code.data);
  }
}

以上方法覆盖了从基础实现到高级定制的完整流程,可根据实际需求选择适合的方案。

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

相关文章

vue里实现增删改查

vue里实现增删改查

在Vue中实现增删改查 数据初始化 在Vue组件的data中定义初始数据和表单绑定的变量: data() { return { items: [ { id: 1, name:…

vue实现图库

vue实现图库

Vue 实现图库的基本方法 使用 Vue 实现图库功能可以通过多种方式完成,以下是一些常见的方法和实现步骤。 使用 Vue 和第三方库(如 Vue Gallery) 安装 vue-gallery 或…

vue实现sso

vue实现sso

Vue 实现 SSO(单点登录)方案 单点登录(SSO)允许用户通过一次登录访问多个相关系统。以下是基于 Vue 的实现方案: 使用 OAuth2/OpenID Connect 协议 OAuth2…

vue实现布局

vue实现布局

Vue 实现布局方法 Vue 提供了多种方式实现页面布局,可以通过组件化、CSS 框架或自定义样式完成。以下是几种常见方法: 使用 CSS Flexbox 或 Grid 通过 Vue 单文件组件结合…

vue 实现搜索

vue 实现搜索

实现 Vue 搜索功能 在 Vue 中实现搜索功能通常涉及以下几个关键步骤: 数据绑定与输入监听 使用 v-model 双向绑定搜索输入框的值,监听用户输入: <template>…

vue实现视频

vue实现视频

Vue 实现视频播放的方法 在 Vue 项目中实现视频播放可以通过多种方式完成,以下是几种常见的方法: 使用 HTML5 的 <video> 标签 在 Vue 组件中直接使用 HTML…