当前位置:首页 > HTML

h5实现扫一扫

2026-03-06 08:45:11HTML

使用HTML5实现扫一扫功能

在HTML5中实现扫一扫功能通常依赖于浏览器的摄像头API和第三方库。以下是几种常见的方法:

使用getUserMedia API访问摄像头

通过navigator.mediaDevices.getUserMedia可以访问用户设备的摄像头,这是实现扫一扫的基础。

navigator.mediaDevices.getUserMedia({ video: true })
  .then(function(stream) {
    const video = document.getElementById('video');
    video.srcObject = stream;
    video.play();
  })
  .catch(function(err) {
    console.error("Error accessing camera: ", err);
  });

集成二维码扫描库

常用的二维码扫描库包括jsQRZXing,这些库可以解析摄像头捕获的图像中的二维码。

// 使用jsQR库示例
const canvas = document.getElementById('canvas');
const context = canvas.getContext('2d');
const video = document.getElementById('video');

function scanQR() {
  if (video.readyState === video.HAVE_ENOUGH_DATA) {
    canvas.height = video.videoHeight;
    canvas.width = video.videoWidth;
    context.drawImage(video, 0, 0, canvas.width, canvas.height);
    const imageData = context.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(scanQR);
}

处理扫描结果

扫描到二维码后,可以根据业务需求处理结果,例如跳转链接或显示内容。

if (code) {
  window.location.href = code.data; // 跳转到二维码中的链接
}

兼容性处理

不同浏览器对摄像头API的支持程度不同,需要做好兼容性处理。

if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {
  alert("Your browser does not support camera access.");
}

完整的示例代码

以下是一个完整的HTML5扫一扫实现示例:

<!DOCTYPE html>
<html>
<head>
  <title>QR Scanner</title>
  <script src="https://cdn.jsdelivr.net/npm/jsqr@1.4.0/dist/jsQR.min.js"></script>
</head>
<body>
  <video id="video" width="300" height="200"></video>
  <canvas id="canvas" style="display: none;"></canvas>
  <script>
    const video = document.getElementById('video');
    const canvas = document.getElementById('canvas');
    const context = canvas.getContext('2d');

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

    function scanQR() {
      if (video.readyState === video.HAVE_ENOUGH_DATA) {
        canvas.height = video.videoHeight;
        canvas.width = video.videoWidth;
        context.drawImage(video, 0, 0, canvas.width, canvas.height);
        const imageData = context.getImageData(0, 0, canvas.width, canvas.height);
        const code = jsQR(imageData.data, imageData.width, imageData.height);
        if (code) {
          alert("Scanned: " + code.data);
        }
      }
      requestAnimationFrame(scanQR);
    }
  </script>
</body>
</html>

注意事项

  • 确保在HTTPS环境下使用摄像头API,大多数浏览器在非安全环境下会限制摄像头访问。
  • 移动端设备可能需要用户手动授权摄像头权限。
  • 扫描性能受设备性能和二维码复杂度影响,可适当调整扫描频率。

h5实现扫一扫

标签: 一扫
分享给朋友: