公交车上荫蒂添的好舒服的电影-公用玩物(np双xing总受)-公用小荡货芊芊-公与妇仑乱hd-攻把受做哭边走边肉楼梯play-古装一级淫片a免费播放口

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

前端使用 JavaScript 實(shí)現(xiàn)網(wǎng)頁(yè)掃碼功能

freeflydom
2024年8月12日 9:38 本文熱度 2259

在數(shù)字化時(shí)代,二維碼已經(jīng)滲透到我們生活的方方面面。從移動(dòng)支付到產(chǎn)品溯源,二維碼憑借其便捷性和高效性,成為了信息傳遞的重要載體。而隨著前端技術(shù)的不斷發(fā)展,我們甚至可以使用 JavaScript 在網(wǎng)頁(yè)端實(shí)現(xiàn)二維碼掃描功能,為用戶(hù)提供更加便捷的操作體驗(yàn)。

本文將帶您深入了解如何使用 JavaScript 調(diào)用攝像頭,結(jié)合 jsQR 庫(kù),以及如何控制閃光燈,最終實(shí)現(xiàn)一個(gè)功能完善的網(wǎng)頁(yè)掃碼應(yīng)用。

一、 項(xiàng)目概述

我們將創(chuàng)建一個(gè)簡(jiǎn)單的網(wǎng)頁(yè)應(yīng)用,該應(yīng)用能夠:

  1. 調(diào)用設(shè)備攝像頭,獲取實(shí)時(shí)視頻流。

  2. 在網(wǎng)頁(yè)上創(chuàng)建一個(gè)掃描區(qū)域,用戶(hù)可以將二維碼放置在該區(qū)域內(nèi)進(jìn)行掃描。

  3. 使用 jsQR 庫(kù)解碼掃描區(qū)域內(nèi)的二維碼圖像數(shù)據(jù),獲取二維碼內(nèi)容。

  4. 提供手動(dòng)輸入二維碼內(nèi)容的功能。

  5. 如果設(shè)備支持,還可以控制閃光燈的開(kāi)關(guān),以便在光線(xiàn)不足的情況下進(jìn)行掃描。

二、 實(shí)現(xiàn)步驟

1. HTML 結(jié)構(gòu)

首先,我們需要構(gòu)建基本的 HTML 結(jié)構(gòu),包括:

  • <video> 標(biāo)簽:用于展示攝像頭捕獲的實(shí)時(shí)視頻流。

  • <canvas> 標(biāo)簽:用于繪制視頻幀和掃描區(qū)域,并從中獲取圖像數(shù)據(jù)。

  • <div> 標(biāo)簽:用于創(chuàng)建掃描區(qū)域、按鈕組等 UI 元素。

<!DOCTYPE html>

<html>

<head>

  <meta charset="UTF-8">

  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <title>掃一掃</title>

  <link rel="stylesheet" href="style.css">

</head>

<body>

  <video id="video" autoplay></video>

  <canvas id="overlay" hidden></canvas>


  <div class="scan-area"></div>


  <div class="btn-group">

    <button id="manualInputBtn">手動(dòng)輸入</button>

    <button id="flashBtn">閃光燈</button>

  </div>


  <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jsQR.min.js"></script>

  <script src="script.js"></script>

</body>

</html>

2. CSS 樣式

為了提升用戶(hù)體驗(yàn),我們需要為頁(yè)面元素添加一些樣式:

/* style.css */

body {

  margin: 0;

  overflow: hidden;

}


#video {

  width: 100%;

  height: auto;

  display: block;

}


#overlay {

  position: absolute;

  top: 0;

  left: 0;

  width: 100%;

  height: 100%;

  pointer-events: none;

}


.scan-area {

  border: 3px solid yellow;

  position: absolute;

  top: 50%;

  left: 50%;

  transform: translate(-50%, -50%);

  width: 80%;

  height: 30%;

}


/* ...其他樣式 */

3. JavaScript 交互

JavaScript 代碼是實(shí)現(xiàn)掃碼功能的核心部分,主要包括以下幾個(gè)步驟:

  1. 獲取攝像頭權(quán)限: 使用 navigator.mediaDevices.getUserMedia() 方法請(qǐng)求訪(fǎng)問(wèn)用戶(hù)的攝像頭。

  2. 播放視頻流: 將獲取到的視頻流賦值給 <video> 標(biāo)簽的 srcObject 屬性,并調(diào)用 video.play() 方法開(kāi)始播放。

  3. 創(chuàng)建掃描循環(huán): 使用 requestAnimationFrame() 方法創(chuàng)建一個(gè)循環(huán),不斷地從視頻流中獲取幀圖像,并進(jìn)行二維碼解碼。

  4. 繪制視頻幀: 在每一幀中,使用 canvas.drawImage() 方法將視頻幀繪制到 <canvas> 元素上。

  5. 獲取掃描區(qū)域圖像數(shù)據(jù): 使用 canvas.getImageData() 方法獲取掃描區(qū)域的圖像數(shù)據(jù)。

  6. 解碼二維碼: 使用 jsQR 庫(kù)的 jsQR() 方法解碼圖像數(shù)據(jù),如果解碼成功,則獲取二維碼內(nèi)容。

  7. 處理掃描結(jié)果: 對(duì)解碼后的二維碼內(nèi)容進(jìn)行處理,例如跳轉(zhuǎn)到鏈接、顯示信息等。

  8. 實(shí)現(xiàn)其他功能: 實(shí)現(xiàn)手動(dòng)輸入二維碼內(nèi)容和控制閃光燈等功能。

// script.js

const video = document.getElementById('video');

const overlay = document.getElementById('overlay');

const manualInputBtn = document.getElementById('manualInputBtn');

const flashBtn = document.getElementById('flashBtn');

const scanArea = document.querySelector('.scan-area');


let stream;

let scanning = false;

let flashEnabled = false;


// 獲取攝像頭權(quán)限并開(kāi)始播放視頻流

navigator.mediaDevices.getUserMedia({ video: { facingMode: "environment" } })

  .then(s => {

    stream = s;

    video.srcObject = stream;

    video.play();


    // 開(kāi)始掃描

    scanning = true;

    requestAnimationFrame(scan);

  })

  .catch(err => {

    console.error("無(wú)法訪(fǎng)問(wèn)攝像頭:", err);

  });


// 掃描二維碼

function scan() {

  if (scanning) {

    const canvas = overlay.getContext('2d');

    const videoWidth = video.videoWidth;

    const videoHeight = video.videoHeight;


    // 設(shè)置畫(huà)布大小

    overlay.width = videoWidth;

    overlay.height = videoHeight;


    // 將視頻幀繪制到畫(huà)布上

    canvas.drawImage(video, 0, 0, videoWidth, videoHeight);


    // ...獲取掃描區(qū)域圖像數(shù)據(jù)


    // 使用 jsQR 庫(kù)解碼二維碼

    const code = jsQR(imageData.data, imageData.width, imageData.height);


    // 如果成功解碼,則停止掃描并處理結(jié)果

    if (code) {

      scanning = false;

      handleScanResult(code.data);

    } else {

      requestAnimationFrame(scan);

    }

  }

}


// 處理掃描結(jié)果

function handleScanResult(data) {

  alert("掃描結(jié)果:" + data);


  // 這里可以根據(jù)掃描結(jié)果進(jìn)行相應(yīng)的操作,例如跳轉(zhuǎn)到鏈接或顯示信息

}


// 手動(dòng)輸入按鈕點(diǎn)擊事件

manualInputBtn.addEventListener('click', function() {

  // ...

});


// 閃光燈按鈕點(diǎn)擊事件

flashBtn.addEventListener('click', function() {

  // ...

});

四、 總結(jié)

通過(guò)以上步驟,我們成功地使用 JavaScript 在網(wǎng)頁(yè)端實(shí)現(xiàn)了二維碼掃描功能。該功能可以廣泛應(yīng)用于各種場(chǎng)景,例如:

  • 移動(dòng)支付: 用戶(hù)可以使用手機(jī)掃描網(wǎng)頁(yè)上的二維碼完成支付。

  • 產(chǎn)品溯源: 用戶(hù)可以?huà)呙璁a(chǎn)品上的二維碼,查看產(chǎn)品信息、生產(chǎn)日期、物流信息等。

  • 活動(dòng)簽到: 用戶(hù)可以使用手機(jī)掃描二維碼完成活動(dòng)簽到。


轉(zhuǎn)自https://www.cnblogs.com/geekcjj/p/18352006


該文章在 2024/8/12 9:38:54 編輯過(guò)
關(guān)鍵字查詢(xún)
相關(guān)文章
正在查詢(xún)...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專(zhuān)業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車(chē)隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類(lèi)企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷(xiāo)售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶(hù)的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 波多野结衣精品一区二区三区 | 国产精品欧美久久久久天天影视 | 国产无码三级在线电影网址 | 国产精品无码高清在线观看 | 国产精品一区高清在线观看 | 国产高潮视频免费观看 | 国产亚洲综合一区二区无码 | 国产午夜片无码区在线导航 | 国产成人无码精品久久久露脸 | 91在线老师啪国自产 | 国产成人亚洲精品在线观看 | 国产极品高清在线播放 | 91在线播放国产日本欧美 | 国产在线精品一区二区夜色 | 国产一区二区在线视频播放 | 国产精品白浆在线播放 | 国产精品好吊一区二区三 | 国产成人女人在线视频观看 | 精品日本免费一区二区三区 | 国产成人无码www免费视频在线 | av无码国产精品性色aⅴ | 91a国产尤物视频 | 国产无你高清在线观看av | 国产91对白在线观看 | 2025国产剧免费在线观看 | 精品偷自拍另类 | 囯产精品一区二区三区线 | 国产精品一级特黄a毛片 | 精品视频免费日产一区 | 国产在线视频不卡一区二区 | 国产字幕无码avbb | 国内自拍视频一区二区 | 国产成人一区二区三区视频免费 | 国产精品操干在线观看 | 国产欧美日韩一级片免费看 | 国产69堂一区二区三 | 国产专区久久播放 | 国产精品国产三级国产专播 | 国产免费乱在线观看 | 91久久久久精品无码∫ | 国产午夜手机精彩视频 |