更新记录

1.0.0(2026-07-20) 下载此版本

  • 首次发布,迁移至 uni_modules 标准化结构
  • 支持 H5 + 微信小程序双端(#ifdef 条件编译)
  • H5:基于 html5-qrcode,getUserMedia 摄像头
  • 微信小程序:基于 <camera mode="scanCode">,原生扫码引擎
  • 支持 fullscreen / inline 双模式
  • 支持闪光灯控制(H5: MediaStreamTrack / 小程序: camera flash 属性)
  • 扫码成功动效 + 提示音 + 震动反馈(双端适配)
  • 完整的 Props 配置体系(5 大类 15+ 项)
  • 5 个事件回调 + 4 个可调用方法
  • 自动资源管理与释放

平台兼容性

uni-app(5.12)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
× × × × ×
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
× × × × × - × × × - -

qrcode-scanner — H5 & 微信小程序扫码组件

基于 html5-qrcode(H5)+ 微信小程序 <camera mode="scanCode"> 封装的 uni-app 扫码组件,支持全屏与内嵌两种模式,H5 与微信小程序双端适配。

平台兼容性

H5 (Chrome) H5 (Safari) 微信小程序 App 其他小程序

H5:基于 html5-qrcode,支持页面内嵌扫码
微信小程序:基于 <camera mode="scanCode">,原生扫码引擎,无需额外依赖
App 端请使用 uni-app 原生扫码 API(uni.scanCode

快速开始

H5 安装依赖

npm install html5-qrcode

微信小程序无需安装额外依赖,直接使用即可。

使用组件

将插件导入 uni_modules 后,通过 easycom 自动引入,无需手动注册:

<template>
  <view>
    <qrcode-scanner @scan-success="onResult" />
  </view>
</template>

<script>
export default {
  methods: {
    onResult(code) {
      uni.showToast({ title: '扫码结果: ' + code, icon: 'none' })
    }
  }
}
</script>

目录结构

uni_modules/qrcode-scanner/
├── package.json           # 插件元数据
├── readme.md              # 本文档
├── changelog.md           # 更新日志
├── components/
│   └── qrcode-scanner/
│       └── qrcode-scanner.vue    # 组件主文件
├── demo/
│   └── index.vue          # 演示页面
└── static/
    └── scanvideo.mp3      # 默认提示音

Props

属性 类型 默认值 说明
核心配置
mode String 'fullscreen' 显示模式:fullscreen / inline
scanColor String '#00e676' 扫码主题色
scanBoxWidth Number 280 扫码框宽度(px)
scanBoxRatio Number 1 扫码框宽高比,1 为正方形
行为配置
repeatInterval Number 2000 重复扫码过滤间隔(ms)
fps Number 15 扫码帧率,1~60
autoStart Boolean true 组件挂载后自动启动摄像头
音效配置
enableScanSound Boolean true 是否开启提示音
scanSoundUrl String '' 自定义提示音 URL,默认用内置
scanSoundVolume Number 0.6 提示音音量,0~1
文案配置
title String '扫码' 全屏模式标题
tipText String '将二维码放入框内…' 底部提示文字
生命周期
autoStopAfterScan Boolean false 扫码成功后自动停止
autoCloseDelay Number 0 成功后延迟关闭(ms),0=不自动关闭

Events

事件名 参数 说明
scan-success decodedText: String 扫码成功,返回解码内容
scan-error error: Error 扫码器启动失败
scan-started 扫码器成功启动
close 点击关闭按钮
torch-changed isOn: Boolean 闪光灯状态变化

Methods(ref 调用)

方法 返回值 说明
initScanner() Promise<void> 手动初始化扫码器
stopScanner() Promise<void> 停止扫码,释放资源
restartScanner() Promise<void> 停止后重新启动
toggleTorch() Promise<void> 切换闪光灯

使用示例

全屏扫码,扫到即关

<template>
  <view>
    <button @click="open = true">打开扫码</button>
    <qrcode-scanner
      v-if="open"
      mode="fullscreen"
      scanColor="#2979ff"
      title="扫描二维码"
      :autoStopAfterScan="true"
      :autoCloseDelay="800"
      @scan-success="handleResult"
      @close="open = false"
    />
  </view>
</template>

内嵌模式

<template>
  <view style="padding:20px">
    <qrcode-scanner mode="inline" :scanBoxWidth="260" @scan-success="handleResult" />
  </view>
</template>

手动控制启停

<template>
  <view>
    <qrcode-scanner ref="scanner" mode="inline" :autoStart="false" @scan-success="onScan" />
    <button @click="$refs.scanner.initScanner()">开始</button>
    <button @click="$refs.scanner.stopScanner()">停止</button>
  </view>
</template>

常见问题

摄像头无法启动

H5

  • 确保页面运行在 HTTPSlocalhost 环境
  • 浏览器已授权摄像头权限
  • 监听 scan-error 事件查看具体错误

微信小程序

  • 确保 app.jsonmanifest.json 中已声明 camera 权限
  • 首次使用会弹出权限授权弹窗,用户需点击"允许"
  • 开发者工具中摄像头可能无法正常工作,需真机测试

识别率低

  • H5:增大 fps(推荐 15~25)
  • 确保二维码清晰、光线充足
  • 适当调整 scanBoxWidth

闪光灯不显示

  • H5:仅后置摄像头 + 硬件支持时可用(getCapabilities().torch
  • 微信小程序:后置摄像头始终支持,通过 camera 组件 flash 属性控制
  • 需在真机上测试,模拟器不支持

微信小程序注意事项

  • 使用 <camera mode="scanCode"> 内置扫码引擎,无需 html5-qrcode
  • 扫码框装饰为纯视觉层,实际识别覆盖整个摄像头画面
  • fps 参数在小程序端无效(由系统控制)

技术依赖

平台 依赖 说明
H5 html5-qrcode ^2.x,底层扫码引擎
微信小程序 使用 <camera mode="scanCode"> 原生能力
uni-app Vue 2 / Vue 3

许可证

MIT

隐私、权限声明

1. 本插件需要申请的系统权限列表:

H5:需要浏览器摄像头权限(getUserMedia);微信小程序:需要摄像头权限(camera 组件)

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

组件本身不采集用户数据,摄像头视频流仅在本地扫码识别使用,不上传服务器

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

暂无用户评论。