H5扫码 html5-qrcode + React中使用

html5-qrcode 库简介

html5-qrcode 是一个轻量级的库,可以让你在网页上轻松实现二维码扫描功能。它支持多种设备和浏览器,并且提供了丰富的配置选项。
注:网络协议必须是HTTPS协议,否则访问不了手机摄像头。

安装 html5-qrcode

npm install html5-qrcode
# 或者
yarn add html5-qrcode

主要 API

1. 创建 Html5Qrcode 实例
const html5Qrcode = new Html5Qrcode(elementId);
  • elementId:HTML 元素的 ID,该元素将被用作视频流的容器。
2. 开始扫描
html5Qrcode.start(cameraIdOrName, config, successCallback, errorCallback);
  • cameraIdOrName:摄像头的 ID 或名称,默认为 'default',表示默认摄像头。
  • config:扫描配置对象。
  • successCallback:扫描成功时的回调函数。
  • errorCallback:扫描失败时的回调函数。
3. 配置对象

配置对象可以包含以下属性:

  • fps: 每秒帧数,默认为 10。
  • qrbox: 二维码检测框大小,默认为 undefined
  • rememberLastUsedCamera: 是否记住上次使用的摄像头,默认为 false
  • torch: 是否打开手电筒,默认为 false
4. 停止扫描
html5Qrcode.stop();

示例代码

下面是一个简单的示例,展示如何使用 html5-qrcode 库进行二维码扫描:

import React, { useEffect, useRef } from 'react';
import Html5Qrcode from 'html5-qrcode';

const BarcodeScanner = () => {
  const html5QrCodeRef = useRef(null); // 使用 ref 来存储扫描器实例
  const isScanning = useRef(false); // 使用 ref 来追踪是否正在扫描

  const startScan = async () => {
    // 如果已经在扫描,则直接返回,防止重复扫描
    if (isScanning.current) {
      return;
    }

    // 创建一个新的 Html5Qrcode 实例
    const html5QrCode = new Html5Qrcode('reader');
    html5QrCodeRef.current = html5QrCode; // 将实例保存到 ref 中
    isScanning.current = true; // 设置为正在扫描

    try {
      await html5QrCode.start(
        { facingMode: "environment" }, // 后置摄像头
        { fps: 10, qrbox: 250, torch: true }, // 扫描配置
        (qrCodeMessage) => {
          console.log('扫描成功:', qrCodeMessage);
          // 扫描成功后停止扫描
          stopScan();
        },
        (err) => {
          console.error('扫描失败:', err);
        }
      );
    } catch (error) {
      console.error('启动扫码失败:', error);
    }
  };

  const stopScan = async () => {
    if (html5QrCodeRef.current) {
      try {
        await html5QrCodeRef.current.stop(); // 停止扫描
        isScanning.current = false; // 结束扫描状态
      } catch (error) {
        console.error('停止扫码失败:', error);
      }
    }
  };

  useEffect(() => {
    startScan(); // 页面加载时开始扫描

    // 清理函数:在组件卸载时停止扫描
    return () => {
      stopScan();
    };
  }, []);

  // 渲染容器
  return (
    <div>
      <div id="reader"></div>
    </div>
  );
};

export default BarcodeScanner;
React,如果你想要让H5页面集成微信的扫一扫功能,你需要通过微信的JavaScript SDK来实现。首先,需要在你的项目里引入微信的`js-sdk`,通常的做法是在HTML文件的`<head>`部分加入如下的代码: ```html <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js" charset="utf-8"></script> ``` 然后,在需要使用扫一扫的地方,你可以创建一个按钮并添加事件监听器,例如: ```jsx import WeixinJSBridge from 'weixin-jsbridge'; function scanButton() { if (typeof WeixinJSBridge === 'undefined') { // 如果微信SDK尚未准备好,注册回调函数 window.addEventListener('load', function () { if (typeof WeixinJSBridge === 'undefined') { document.getElementById('scan-button').onclick = scanButton; } else { WeixinJSBridge.call('scanCode', { success: function (res) { console.log('扫描结果:', res); // 这里处理扫码后的逻辑 }, cancel: function () { // 用户取消扫码操作 } }, { scanType: ['qrCode', 'barCode'], // 可选扫码类型 needResult: 1, // 默认为true,0表示直接返回扫描结果,1表示弹出可以选择保存的图片或者文字 saveToAlbum: false // 默认false,如果设置为true则可以将图片保存到手机相册 }); } }); } else { // 如果已经准备好,直接调用 WeixinJSBridge.on('menu:share:appmessage', function (params) { // 扫一扫成功后的回调 }); WeixinJSBridge.call('scanCode'); } } // 在渲染阶段添加按钮并触发事件 render() { return ( <button id="scan-button" onClick={scanButton}>扫一扫</button> ); } ``` 记得在实际应用替换上述示例的回调处理逻辑,并且在用户首次访问页面时检查是否已授权微信JS-SDK,如果没有,需引导用户手动授权。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值