当前位置:首页 > VUE

vue实现扫码条码

2026-02-21 11:23:25VUE

使用 Vue 实现扫码条码功能

安装依赖库

推荐使用 vue-barcode-readerquagga 库实现扫码功能。安装命令如下:

npm install vue-barcode-reader quagga

使用 vue-barcode-reader 实现

该库封装了浏览器的 Barcode Detection API,适用于简单场景:

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

<script>
import { BarcodeDetector } from 'vue-barcode-reader';

export default {
  data() {
    return {
      result: '',
      detector: null
    };
  },
  methods: {
    async startScan() {
      this.detector = new BarcodeDetector({ formats: ['ean_13'] });
      const stream = await navigator.mediaDevices.getUserMedia({ video: true });
      this.$refs.video.srcObject = stream;

      setInterval(async () => {
        const barcodes = await this.detector.detect(this.$refs.video);
        if (barcodes.length > 0) {
          this.result = barcodes[0].rawValue;
          stream.getTracks().forEach(track => track.stop());
        }
      }, 1000);
    }
  }
};
</script>

使用 Quagga 实现

Quagga 支持更多条码格式且兼容性更好:

<template>
  <div>
    <div id="interactive" class="viewport"></div>
    <button @click="stopScan">停止扫描</button>
    <p>结果: {{ decodedText }}</p>
  </div>
</template>

<script>
import Quagga from 'quagga';

export default {
  data() {
    return {
      decodedText: ''
    };
  },
  mounted() {
    Quagga.init({
      inputStream: {
        name: "Live",
        type: "LiveStream",
        target: document.querySelector('#interactive'),
        constraints: {
          width: 480,
          height: 320,
          facingMode: "environment"
        }
      },
      decoder: {
        readers: ["ean_reader"]
      }
    }, err => {
      if (err) console.error(err);
      Quagga.start();
    });

    Quagga.onDetected(result => {
      this.decodedText = result.codeResult.code;
    });
  },
  methods: {
    stopScan() {
      Quagga.stop();
    }
  }
};
</script>

<style>
.viewport {
  width: 480px;
  height: 320px;
  margin: 0 auto;
}
</style>

注意事项

  • 浏览器兼容性:Chrome 和 Edge 对 Barcode Detection API 支持较好,移动端需测试兼容性
  • HTTPS 环境:摄像头调用需要安全上下文
  • 性能优化:扫描间隔建议设置在 500ms-1000ms 之间
  • 错误处理:添加用户拒绝摄像头权限的提示处理

移动端适配建议

对于移动端项目,可增加全屏模式和方向锁定:

vue实现扫码条码

.viewport {
  position: fixed;
  top: 0;
  left: 0;
  width: 100vw;
  height: 100vh;
  z-index: 9999;
}

以上两种方案均可实现基础扫码功能,根据项目需求选择合适方案。Quagga 支持更多格式(如 Code128、QR Code 等),而 vue-barcode-reader 更轻量。

标签: 条码vue
分享给朋友:

相关文章

vue路由实现内部切换

vue路由实现内部切换

Vue 路由实现内部切换的方法 Vue Router 是 Vue.js 官方的路由管理器,用于实现单页应用(SPA)的页面切换。以下是几种常见的内部路由切换方式: 使用 <router-lin…

vue实现密码框的包

vue实现密码框的包

Vue 密码框实现方案 在 Vue 中实现密码框功能,可以通过原生 HTML 结合 Vue 指令或使用第三方组件库完成。以下是几种常见方案: 原生 HTML + Vue 双向绑定 <templ…

vue实现骰子

vue实现骰子

Vue 实现骰子功能 创建 Vue 组件 在 Vue 项目中创建一个骰子组件,例如 Dice.vue。该组件包含骰子的外观和逻辑。 <template> <div class=…

vue实现定时

vue实现定时

Vue 实现定时功能的方法 使用 setInterval 和 clearInterval 在 Vue 中可以通过 setInterval 和 clearInterval 实现定时功能。在组件的 mou…

vue scrolltop 实现

vue scrolltop 实现

实现 Vue 中的 scrollTop 在 Vue 中实现滚动到顶部功能可以通过多种方式完成,包括使用原生 JavaScript、Vue 指令或第三方库。以下是几种常见的实现方法: 使用原生 Jav…

vue实现select

vue实现select

Vue 实现 Select 组件的方法 在 Vue 中实现 Select 组件可以通过多种方式完成,以下是几种常见的方法: 使用原生 HTML select 元素 原生 HTML 的 <sel…