当前位置:首页 > 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:

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插件:

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;
  // 解析逻辑...
}

兼容性处理

检测浏览器支持情况:

js开启扫码实现

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

标签: js
分享给朋友:

相关文章

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

js实现自举

js实现自举

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

js 实现滚动

js 实现滚动

实现滚动的方法 使用 window.scrollTo() window.scrollTo() 方法可以滚动到文档中的特定位置。可以指定 x 和 y 坐标,或者使用平滑滚动的选项。 // 滚动到指定位…

js实现菜单

js实现菜单

实现基本HTML结构 使用HTML创建菜单的基本框架,通常包含<ul>和<li>元素。示例结构如下: <ul id="menu"> <li><…