欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue?調(diào)用攝像頭掃描條碼功能實(shí)現(xiàn)代碼

 更新時(shí)間:2025年03月19日 12:09:10   作者:JxHillMan  
本文介紹了如何使用Vue.js和jsQR庫(kù)來(lái)實(shí)現(xiàn)調(diào)用攝像頭并掃描條碼的功能,通過(guò)安裝依賴、獲取攝像頭視頻流、解析條碼等步驟,實(shí)現(xiàn)了從開始掃描到停止掃描的完整流程,同時(shí),還強(qiáng)調(diào)了瀏覽器兼容性、HTTPS環(huán)境、權(quán)限問(wèn)題和性能優(yōu)化的重要性,感興趣的朋友一起看看吧

以下是一個(gè)基于 Vue.js 的頁(yè)面代碼示例,用于調(diào)用攝像頭并掃描條碼。我們將使用 jsQR 庫(kù)來(lái)解析二維碼(或條形碼),這是一個(gè)輕量級(jí)的 JavaScript 庫(kù)。

實(shí)現(xiàn)步驟:

  • 安裝依賴:需要引入 jsQR 庫(kù)。
  • 調(diào)用攝像頭:通過(guò) navigator.mediaDevices.getUserMedia 獲取攝像頭視頻流。
  • 解析條碼:使用 jsQR 對(duì)視頻幀進(jìn)行解析。

代碼實(shí)現(xiàn)

1. 安裝依賴

在項(xiàng)目中安裝 jsQR

npm install jsqr

2. Vue 頁(yè)面代碼

以下是完整的 Vue 頁(yè)面代碼:

<template>
  <div class="scanner-container">
    <h2>條碼掃描</h2>
    <video ref="video" autoplay playsinline></video>
    <canvas ref="canvas" style="display: none;"></canvas>
    <p v-if="barcode">掃描結(jié)果: {{ barcode }}</p>
    <button @click="startScanner" :disabled="isScanning">開始掃描</button>
    <button @click="stopScanner" :disabled="!isScanning">停止掃描</button>
  </div>
</template>
<script>
import jsQR from "jsqr";
export default {
  data() {
    return {
      isScanning: false,
      barcode: null,
      videoStream: null,
    };
  },
  methods: {
    async startScanner() {
      try {
        // 請(qǐng)求訪問(wèn)攝像頭
        this.videoStream = await navigator.mediaDevices.getUserMedia({
          video: { facingMode: "environment" }, // 使用后置攝像頭
        });
        this.$refs.video.srcObject = this.videoStream;
        // 等待視頻元數(shù)據(jù)加載完成
        await new Promise((resolve) => {
          this.$refs.video.onloadedmetadata = resolve;
        });
        this.isScanning = true;
        this.scanBarcode(); // 開始掃描
      } catch (error) {
        console.error("無(wú)法訪問(wèn)攝像頭:", error);
        alert("無(wú)法訪問(wèn)攝像頭,請(qǐng)檢查權(quán)限設(shè)置!");
      }
    },
    stopScanner() {
      if (this.videoStream) {
        const tracks = this.videoStream.getTracks();
        tracks.forEach((track) => track.stop());
        this.videoStream = null;
        this.isScanning = false;
      }
    },
    scanBarcode() {
      if (!this.isScanning) return;
      const video = this.$refs.video;
      const canvas = this.$refs.canvas;
      const context = canvas.getContext("2d", { willReadFrequently: true }); // 添加此選項(xiàng)
      // 設(shè)置 canvas 尺寸與視頻一致
      canvas.width = video.videoWidth;
      canvas.height = video.videoHeight;
      // 繪制視頻幀到 canvas
      context.drawImage(video, 0, 0, canvas.width, canvas.height);
      // 獲取圖像數(shù)據(jù)
      const imageData = context.getImageData(0, 0, canvas.width, canvas.height);
      // 使用 jsQR 解析條碼
      const code = jsQR(imageData.data, imageData.width, imageData.height);
      if (code) {
        this.barcode = code.data; // 保存掃描結(jié)果
        this.stopScanner(); // 停止掃描
      } else {
        // 繼續(xù)掃描下一幀
        requestAnimationFrame(this.scanBarcode);
      }
    },
  },
  beforeDestroy() {
    this.stopScanner(); // 離開頁(yè)面時(shí)停止攝像頭
  },
};
</script>
<style scoped>
.scanner-container {
  text-align: center;
  margin-top: 20px;
}
video {
  width: 100%;
  max-width: 400px;
  margin: 20px auto;
  border: 1px solid #ccc;
}
button {
  margin: 10px;
  padding: 10px 20px;
  font-size: 16px;
  cursor: pointer;
}
</style>

功能說(shuō)明

開始掃描

  • 點(diǎn)擊“開始掃描”按鈕后,頁(yè)面會(huì)請(qǐng)求訪問(wèn)設(shè)備攝像頭,并顯示實(shí)時(shí)視頻流。
  • 使用 jsQR 對(duì)每一幀視頻進(jìn)行解析,直到成功識(shí)別條碼。

停止掃描

  • 點(diǎn)擊“停止掃描”按鈕后,攝像頭會(huì)被關(guān)閉,掃描停止。

掃描結(jié)果顯示

  • 當(dāng)成功解析條碼后,掃描結(jié)果會(huì)顯示在頁(yè)面上,并自動(dòng)停止掃描。

注意事項(xiàng)

瀏覽器兼容性

  • 需要在支持 getUserMedia 的現(xiàn)代瀏覽器中運(yùn)行(如 Chrome、Edge)。
  • HTTPS 環(huán)境下才能正常使用攝像頭。

權(quán)限問(wèn)題

  • 用戶需授予攝像頭訪問(wèn)權(quán)限,否則無(wú)法正常工作。

性能優(yōu)化

  • 如果掃描速度較慢,可以調(diào)整 canvas 的分辨率以提高性能。

到此這篇關(guān)于Vue 調(diào)用攝像頭掃描條碼的文章就介紹到這了,更多相關(guān)Vue 調(diào)用掃描條碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • LogicFlow插件使用前準(zhǔn)備詳解

    LogicFlow插件使用前準(zhǔn)備詳解

    這篇文章主要為大家介紹了LogicFlow插件使用前準(zhǔn)備詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Vue?Router組合布局用法詳解

    Vue?Router組合布局用法詳解

    今天我們用一種新的布局方式,使用路由視圖來(lái)實(shí)現(xiàn)布局樣式,本文將給大家介紹如何使用Vue?Router組合布局,文中有詳細(xì)的代碼示例供大家參考,感興趣的同學(xué)可以跟著小編一起學(xué)習(xí)
    2023-05-05
  • 解決vue單頁(yè)路由跳轉(zhuǎn)后scrollTop的問(wèn)題

    解決vue單頁(yè)路由跳轉(zhuǎn)后scrollTop的問(wèn)題

    今天小編就為大家分享一篇解決vue單頁(yè)路由跳轉(zhuǎn)后scrollTop的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • vue3路由跳轉(zhuǎn)params傳參接收不到的解決辦法

    vue3路由跳轉(zhuǎn)params傳參接收不到的解決辦法

    這篇文章主要給大家介紹了關(guān)于vue3路由跳轉(zhuǎn)params傳參接收不到的解決辦法,Vue3是目前前端開發(fā)中非常流行的框架之一,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • Nuxt 嵌套路由nuxt-child組件用法(父子頁(yè)面組件的傳值)

    Nuxt 嵌套路由nuxt-child組件用法(父子頁(yè)面組件的傳值)

    這篇文章主要介紹了Nuxt 嵌套路由nuxt-child組件用法(父子頁(yè)面組件的傳值),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • vue踩坑記錄之?dāng)?shù)組定義和賦值問(wèn)題

    vue踩坑記錄之?dāng)?shù)組定義和賦值問(wèn)題

    這篇文章主要給大家介紹了關(guān)于vue踩坑記錄之?dāng)?shù)組定義和賦值問(wèn)題的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • vue中如何通過(guò)函數(shù)傳參數(shù)

    vue中如何通過(guò)函數(shù)傳參數(shù)

    這篇文章主要介紹了vue中如何通過(guò)函數(shù)傳參數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Vue路由元信息與懶加載和模塊拆分詳細(xì)介紹

    Vue路由元信息與懶加載和模塊拆分詳細(xì)介紹

    有時(shí),你可能希望將任意信息附加到路由上,如過(guò)渡名稱、誰(shuí)可以訪問(wèn)路由等。這些事情可以通過(guò)接收屬性對(duì)象的meta屬性來(lái)實(shí)現(xiàn),并且它可以在路由地址和導(dǎo)航守衛(wèi)上都被訪問(wèn)到
    2022-09-09
  • 關(guān)于vue3.0使用axios報(bào)錯(cuò)問(wèn)題

    關(guān)于vue3.0使用axios報(bào)錯(cuò)問(wèn)題

    這篇文章主要介紹了vue3.0使用axios報(bào)錯(cuò)問(wèn)題記錄,vue-cli3.0安裝插件的時(shí)候要注意區(qū)分vue-cli2.0的命令,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • Vue3中使用Pinia修改State的五種方式

    Vue3中使用Pinia修改State的五種方式

    這篇文章主要介紹了Vue3中使用Pinia修改State的五種方式,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2023-11-11

最新評(píng)論