当前位置:首页 > JavaScript

js开启扫码实现

2026-04-04 20:42:38JavaScript

使用HTML5的getUserMedia API实现扫码

在浏览器中实现扫码功能可以通过访问摄像头并使用JavaScript库解析二维码。常见的库有jsQRZXing

安装jsQR库:

npm install jsqr

示例代码:

<video id="qr-video" width="300" height="300"></video>
<canvas id="qr-canvas" style="display:none;"></canvas>

<script src="https://cdn.jsdelivr.net/npm/jsqr@1.4.0/dist/jsQR.min.js"></script>
<script>
  const video = document.getElementById('qr-video');
  const canvas = document.getElementById('qr-canvas');
  const ctx = canvas.getContext('2d');

  navigator.mediaDevices.getUserMedia({ video: { facingMode: 'environment' } })
    .then(stream => {
      video.srcObject = stream;
      video.play();
      requestAnimationFrame(tick);
    });

  function tick() {
    if (video.readyState === video.HAVE_ENOUGH_DATA) {
      canvas.width = video.videoWidth;
      canvas.height = video.videoHeight;
      ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
      const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
      const code = jsQR(imageData.data, imageData.width, imageData.height);

      if (code) {
        console.log('Found QR code:', code.data);
      }
    }
    requestAnimationFrame(tick);
  }
</script>

使用ZXing库实现扫码

ZXing是一个功能更强大的二维码处理库,支持更多格式。

安装ZXing:

js开启扫码实现

npm install @zxing/library

示例代码:

import { BrowserQRCodeReader } from '@zxing/library';

const codeReader = new BrowserQRCodeReader();
codeReader.decodeFromInputVideoDevice(undefined, 'qr-video')
  .then(result => console.log(result.text))
  .catch(err => console.error(err));

移动端扫码实现

对于移动端应用,可以使用Cordova或Capacitor插件:

安装Cordova插件:

js开启扫码实现

cordova plugin add phonegap-plugin-barcodescanner

调用示例:

cordova.plugins.barcodeScanner.scan(
  result => console.log('Scanned:', result.text),
  error => console.log('Error:', error)
);

安全性考虑

使用摄像头时需要用户授权,确保在HTTPS环境下运行。在iOS上,getUserMedia需要用户主动交互才能触发。

性能优化

对于持续扫码场景,可以限制解析频率:

let lastScan = 0;
function tick() {
  const now = Date.now();
  if (now - lastScan < 500) {
    requestAnimationFrame(tick);
    return;
  }
  lastScan = now;
  // 解析逻辑...
}

兼容性处理

检测浏览器支持情况:

if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {
  alert('您的浏览器不支持摄像头访问');
}

标签: js
分享给朋友:

相关文章

js实现轮播图

js实现轮播图

基础轮播图实现 使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。 <div class="slider"> <div…

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callbac…

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <…

js 实现递归

js 实现递归

递归的基本概念 递归是指函数直接或间接调用自身的过程。在JavaScript中,递归通常用于解决可以分解为相似子问题的问题,如阶乘、斐波那契数列、树形结构遍历等。 递归的实现要点 基线条件(Base…