当前位置: 首页 > article >正文

[uniapp] 实现扫码功能,含APP、h5、小程序

 🚀 个人简介:某大型国企资深软件开发工程师,信息系统项目管理师、CSDN优质创作者、阿里云专家博主,华为云云享专家,分享前端后端相关技术与工作常见问题~

💟 作    者:码喽的自我修养🥰
📝 专    栏:uniapp与微信小程序 🎉

🌈 创作不易,如果能帮助到带大家,欢迎 收藏+关注  💕

​ 🌈🌈文章目录  

场景描述

APP、微信小程序如何实现 (原生扫码功能)

h5如何实现(扫码功能插件)

步骤1.导入插件(两种方式,选其一)

步骤2.新建页面 scan-qrcode,作为扫码页面。

步骤3.在需要调用扫码功能的页面进行 页面跳转

相关API

可传属性(Props)

事件(Events)

常见的错误信息:

插槽 (slot)

场景描述

在众多移动应用中需要用到扫码二维码或条码查询信息的场景比比皆是,如 商品管理中查询商品信息,订单跟踪过程中扫码单号查询订单信息和库存管理中的商品盘点。

APP、微信小程序如何实现 (原生扫码功能)

<!-- 在 'manifest.json' 中允许打开摄像头权限 -->

<template>
	<button @click="scanQRcodes">扫码</button>
</template>

<script setup>
// 扫码
const scanQRcodes = () => {
	uni.scanCode({
		success: (res) => {
			if (res.result) {
				console.log('扫描结果:', res.result);
			} else {
				uni.showToast({
					title: '扫描失败',
					icon: 'none'
				});
			}
		},
		fail: (err) => {
			if (err.errMsg.includes('cancel')) {
				uni.showToast({
					title: '扫描已取消',
					icon: 'none'
				});
			} else {
				uni.showToast({
					title: '调用相机失败',
					icon: 'none'
				});
			}
		}
	});
};
</script>

h5如何实现(扫码功能插件)

步骤1.导入插件(两种方式,选其一)

(1)HBuilder 创建的项目:从应用市场导入 mumu-getQrcode插件 到uniapp项目中mumu-getQrcodeicon-default.png?t=O83Ahttps://ext.dcloud.net.cn/plugin?id=7007

(2)脚手架创建的 uni 项目:需要自行安装 jsQR 依赖,并且修改组件中源码中的引入。

# 安装 jsQR
npm install jsqr --save

# 修改组件源码对 jsQR 依赖
import jsQR from "jsqr"

步骤2.新建页面 scan-qrcode,作为扫码页面。

<template>
	<view class="container">
		<mumu-get-qrcode @success='qrcodeSucess' @error="qrcodeError"></mumu-get-qrcode>
	</view>
</template>
 
<script>
	import mumuGetQrcode from '@/uni_modules/mumu-getQrcode/components/mumu-getQrcode/mumu-getQrcode.vue'
    
	export default {
		components: {
			mumuGetQrcode  //注册
		},
		data() {
			return {
			}
		},
		name: 'Qrcode',
		methods: {
			qrcodeSucess(data) { //扫码成功
				 console.log(data)
              // 确认弹窗(若不需要可以去除)
				 uni.showModal({
				 	title: '成功',
				 	content: data,
				 	success: () => { // 确认弹窗后的操作 }
				 })
			},
			qrcodeError(err) {  //扫码失败
				uni.showModal({
					title: '摄像头授权失败',
					content: '摄像头授权失败,请检测当前浏览器是否有摄像头权限。',
					success: () => {
						uni.navigateBack({})  //返回到上一页
					}
				})
			}
		}
	};
</script>

步骤3.在需要调用扫码功能的页面进行 页面跳转

uni.navigateTo({
    url: '/pages/scan-qrcode/scan-qrcode'
});

相关API

可传属性(Props)

参数说明类型默认值
continue是否连续获取。false 监听一次 true 持续监听Booleanfalse
exact选调用摄像头。environment 后摄像头 user 前摄像头Stringenvironment
size扫码屏幕大小。whole 全屏 balf 半屏Stringwhole
definition调用摄像头清晰度。fasle 正常 true 高清Booleanfalse

事件(Events)

事件名说明回调参数
success检测到图中有二维码并读取到数据是回调二维码数据
error组件内部发送错误,通常是摄像头没有调用成功错误信息,详情见下

常见的错误信息:

  • AbortError[中止错误]

    尽管用户和操作系统都授予了访问设备硬件的权利,而且未出现可能抛出NotReadableError异常的硬件问题,但仍然有一些问题的出现导致了设备无法被使用。

  • NotAllowedError[拒绝错误]

    用户拒绝了当前的浏览器实例的访问请求;或者用户拒绝了当前会话的访问;或者用户在全局范围内拒绝了所有媒体访问请求。

  • NotFoundError[找不到错误]

    找不到满足请求参数的媒体类型。

  • NotReadableError[无法读取错误]

    尽管用户已经授权使用相应的设备,操作系统上某个硬件、浏览器或者网页层面发生的错误导致设备无法被访问。

  • OverconstrainedError[无法满足要求错误]

    指定的要求无法被设备满足,此异常是一个类型为OverconstrainedError的对象,拥有一个constraint属性,这个属性包含了当前无法被满足的constraint对象,还拥有一个message属性,包含了阅读友好的字符串用来说明情况。

  • SecurityError[安全错误]

    getUserMedia() 被调用的 Document 上面,使用设备媒体被禁止。这个机制是否开启或者关闭取决于单个用户的偏好设置。

  • TypeError[类型错误]

    constraints 对象未设置[空],或者都被设置为false

插槽 (slot)

插槽名称说明默认值
error当发送错误时,在页面上显示的内容相机权限被拒绝提示

到此这篇文章就介绍到这了,更多精彩内容请关注本人以前的文章或继续浏览下面的文章,创作不易,如果能帮助到大家,希望大家点点收藏+关注 ~💕  

​ 

   更多专栏订阅推荐:

🥕 JavaScript深入研究

👍 前端工程搭建
💕 vue从基础到起飞

✈️ HTML5与CSS3

🖼️ JavaScript基础

⭐️ uniapp与微信小程序

📝 前端工作常见问题与避坑指南

✍️ GIS地图与大数据可视化

📚 常用组件库与实用工具

💡 java入门到实战 


http://www.kler.cn/a/541174.html

相关文章:

  • 内存飚⾼问题定位
  • Linux 安装 Ollama
  • 【网络安全】服务器安装Docker及拉取镜像教程
  • 防御综合实验
  • Games202 Lecture11 LTC | Disney principled BRDF | NPR
  • Linux:库
  • web前端录制canvas视频和video的声音,并合并成一个文件进行下载
  • 无法在Django 1.6中导入自定义应用
  • 如何用Excel制作一个日历表/万年历
  • Linux——网络(https)
  • Solidity09 Solidity构造函数和修饰器
  • Kickstart自动化安装过程中自动选择较小的磁盘安装操作系统
  • Kafka 的消费offset原来是使用ZK管理,现在新版本是怎么管理的?
  • STM32调试工具OLED
  • 从家庭IP到全球网络资源的无缝连接:Cliproxy的专业解决方案
  • 【苍穹外卖】修改前端代码解决修改Nginx端口后websocket连接失败的问题
  • [网络]url解码,从网址转化为ip
  • 线程池里面的execute 和 submit 方法有什么区别?
  • Docker 部署 MongoDB | 国内阿里镜像
  • 汽车与AI深度融合:CES Asia 2025前瞻
  • 问卷数据分析|SPSS实操之信度效度检验
  • 老游戏回顾:TR9
  • Spring Boot 项目中使用腾讯云对象存储(COS)
  • 20爬虫:使用playwright与图鉴破解豆瓣滑动验证码
  • 软考高级《系统架构设计师》知识点(一)
  • Vue 响应式渲染 - Vue3 Class和style