H5扫描二维码相关实现

        H5  Web网页实现扫一扫识别解析二维码,就现在方法的npm包就能实现,在这个过程中使用过html5-qrcode 和 vue3-qr-reader。

1、html5-qrcode的使用

       感觉html5-qrcode有点小坑,在使用的时候识别不成功还总是进入到错误回调中出现类似NotFoundException: No MultiFormat Readers were able to detect the ....的错误,后面去到官网GitHub上看到有人说是版本问题,降到指定版本之后,一开始没有问题也可以识别了,奇怪的是,过一个星期直接噶了😭。。。(感觉不是很稳定,如果有不同见解可以交流一下)

html5-qrcode 的具体使用参考html5-qrcode

2、vue3-qr-reader的使用

vue3-qr-reader 是继 html5-qrcode 找到的第二种方案,这个相对来说比较稳定使用方式简单:

        1、vue3项目中下载vue3-qr-reader包

npm install vue3-qr-reader// 或者npm i vue3-qr-reader

         2、在项目中引用需要使用的组件,在页面t使用组件

<template><van-button @click="openQrcode" color="rgba(0, 0, 0, 0.3)"style="border-color: rgba(255, 255, 255, 0.4)">扫一扫</van-button><-- 扫码页面内容 !--><div class="reader-box" v-if="isScaning"><div class="line"></div><qr-stream @decode="onDecode" class="mb"><div class="frame" style="color: red;"></div></qr-stream><div class="desc">扫描激活二维码</div><van-button @click="closeQrcode" color="rgba(0, 0, 0, 0.3)"style="border-color: rgba(255, 255, 255, 0.4)">返回</van-button></div>
</template><script setup>
// 引入依赖
import { QrStream } from "vue3-qr-reader"// ...const isScaning = ref(false)// 开启扫码
const openQrcode = ()=>{isScaning.value = true
}
// 关闭扫码
const closeQrcode = ()=> {isScaning.value = false
}// 处理扫码成功后相关的业务内容
const onDecode = (data)=>{try{// data 为扫码结果 对data做相关处理进行下一步操作}catch(err){closeQrcode()showNotify({type:'danger',message:'扫码失败,请联系管理员'})}
}
</script>
/* 相关样式 */
.reader-box {position: fixed;top: 0;bottom: 0;left: 0;right: 0;width: 100vw;height: 100vh;background-color: rgba(0, 0, 0, 0.9);z-index: 999;display: flex;justify-content: center;align-items: center;flex-direction: column;
}
.reader-box .desc {position: fixed;bottom: 140px;font-family: PingFang SC, PingFang SC;font-weight: bold;font-size: 15px;color: #ffffff;margin-top: 16px;
}
.reader-box .van-button {position: absolute;bottom: 70px;width: 90%;border: 1px solid #fff;
}
.line {position: absolute;top: 180px;width: 100%;animation: radar-beam 2s infinite;animation-timing-function: cubic-bezier(0.53, 0, 0.43, 0.99);animation-delay: 1.4s;z-index: 9999;height: 130px;border-bottom: 1px solid #4b66d0;background: linear-gradient(to top, #4b66d0, transparent);
}@keyframes radar-beam {0% {transform: translateY(-100%);}100% {transform: translateY(90%);}
}

最终实现效果如下

注意:因为获取摄像头权限,需要网页是https的,所以在本地调试的话要开启https,开启https的方式,可以参考这个大佬的方式本地localhost开启https通过软件及命令生成证书,并将证书放入到vue项目中,在vite.config.js的配置中加入并保存即可

import vue from '@vitejs/plugin-vue';
import { defineConfig, loadEnv } from 'vite';
import Components from 'unplugin-vue-components/vite';
import { VantResolver } from 'unplugin-vue-components/resolvers';
const fs = require('fs');export default ({ mode }) =>defineConfig({plugins: [vue(),Components({resolvers: [VantResolver()],}),],css: {postcss: {plugins: [require('postcss-pxtorem')({rootValue: 50,propList: ['*'],selectorBlackList: ['.van-'],}),],},},base: './',server: {host: '0.0.0.0',// port: import.meta.VITE_PORT,port: loadEnv(mode, process.cwd()).VITE_PORT,// open: import.meta.VITE_OPEN,proxy: {'/api': {target: 'https://xxx.com/',ws: true,changeOrigin: true,rewrite: (path) => path.replace(/^\/api/, ''),},},https: {key: fs.readFileSync('public/127.0.0.1-key.pem'),cert: fs.readFileSync('public/127.0.0.1.pem'),},},minify: 'esbuild',sourcemap: false,});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/16352.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python怎样将PDF拆分成多个文件

在 Python 中&#xff0c;你可以使用 PyPDF2 库来拆分 PDF 文件。以下是一个简单的示例&#xff0c;演示如何将一个 PDF 文件拆分为多个单页 PDF 文件。 首先&#xff0c;你需要安装 PyPDF2 库。如果尚未安装&#xff0c;可以使用以下命令进行安装&#xff1a; pip install P…

天干物燥小心火烛-智慧消防可视化大屏,隐患防治于未然。

智慧消防可视化大屏通常包括以下内容&#xff1a; 1.实时监控&#xff1a; 显示消防设备、传感器、监控摄像头等设备的实时状态和数据&#xff0c;包括火灾报警、烟雾报警、温度报警等。 2.建筑结构&#xff1a; 显示建筑物的结构图和平面图&#xff0c;包括楼层分布、消防通…

VLC播放器(全称VideoLAN Client)

一、简介 VLC播放器&#xff08;全称VideoLAN Client&#xff09;是一款开源的多媒体播放器&#xff0c;由VideoLAN项目团队开发。它支持多种音视频格式&#xff0c;并能够在多种操作系统上运行&#xff0c;如Windows、Mac OS X、Linux、Android和iOS等。VLC播放器具备播放文件…

特殊变量笔记3

输入一个错误命令, 在输出$? 特殊变量&#xff1a;$$ 语法 $$含义 用于获取当前Shell环境的进程ID号 演示 查看当前Shell环境进程编号 ps -aux|grep bash输出 $$ 显示当前shell环境进程编号 小结 常用的特殊符号变量如下 特殊变量含义$n获取输入参数的$0, 获取当前She…

hugging face笔记:PEFT

1 介绍 PEFT (Parameter-Efficient Fine Tuning) 方法在微调时冻结预训练模型参数&#xff0c;并在其上添加少量可训练的参数&#xff08;称为适配器&#xff09;这些适配器被训练用来学习特定任务的信息。这种方法已被证明在内存效率和计算使用上非常高效&#xff0c;同时能产…

线性模型--普通最小二乘法

线性模型 一、模型介绍二、用于回归的线性模型2.1 线性回归&#xff08;普通最小二乘法&#xff09; 一、模型介绍 线性模型是在实践中广泛使用的一类模型&#xff0c;该模型利用输入特征的线性函数进行预测。 二、用于回归的线性模型 以下代码可以在一维wave数据集上学习参…

基于51单片机的超声波液位测量与控制系统

基于51单片机液位控制器 &#xff08;仿真&#xff0b;程序&#xff0b;原理图PCB&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.使用HC-SR04测量液位&#xff0c;LCD1602显示&#xff1b; 2.当水位高于设定上限的时候&#xff0c;对应声光报警报警&am…

手机卡该地块

package demo; package demo; public class Phonetest { public static void main(String[] args) { Phone pnew Phone(); p.brand"小米"; p.price1998.98; System.out.println(…

在业务开发中使用ElasticSearch的指导手册

文章目录 该业务为什么需要ElasticSearch? / 该业务需要ElasticSearch的核心功能是哪些&#xff1f;正确示例错误示例 如何快速验证分词是否能够满足业务需求&#xff1f;分词不满足&#xff0c;如何自定义分词&#xff1f; 业务数据的字段类型映射是否合理&#xff1f;实践中…

MySQL设置表自增步长

在MySQL数据库管理中&#xff0c;自增字段&#xff08;AUTO_INCREMENT&#xff09;是一种常见且重要的功能&#xff0c;通常用于生成唯一的标识符&#xff08;如主键&#xff09;。然而&#xff0c;在多种应用场景下&#xff0c;默认的自增步长&#xff08;1&#xff09;可能无…

【InternLM实战营第二期笔记】02:大模型全链路开源体系与趣味demo

文章目录 00 环境设置01 部署一个 chat 小模型02 Lagent 运行 InternLM2-chat-7B03 浦语灵笔2 第二节课程视频与文档&#xff1a; https://www.bilibili.com/video/BV1AH4y1H78d/ https://github.com/InternLM/Tutorial/blob/camp2/helloworld/hello_world.md 视频和文档内容基…

003 CentOS 7.9 mysql8.3.0安装及配置

文章目录 Windows PowerShell测试端口安装及配置1. 下载MySQL安装包2. 解压安装包3. 安装MySQL4. 启动MySQL服务5. 获取并设置MySQL root密码6. 创建数据库7. 配置远程连接&#xff08;可选&#xff09; 卸载mysql检查并卸载已有的MySQL或MariaDB&#xff1a; https://download…

云计算和大数据处理

文章目录 1.云计算基础知识1.1 基本概念1.2 云计算分类 2.大数据处理基础知识2.1 基础知识2.3 大数据处理技术 1.云计算基础知识 1.1 基本概念 云计算是一种提供资源的网络&#xff0c;使用者可以随时获取“云”上的资源&#xff0c;按需求量使用&#xff0c;并且可以看成是无…

AWS安全性身份和合规性之WAF(Web Application Firewall)

AWS WAF&#xff08;Web Application Firewall&#xff09;是一项AWS托管的网络安全服务&#xff0c;用于保护Web应用程序免受常见的Web攻击&#xff0c;如SQL注入、跨站脚本&#xff08;XSS&#xff09;、跨站请求伪造&#xff08;CSRF&#xff09;等。 应用场景&#xff1a;…

STM32应用开发进阶--IIC总线(SHT20温湿度+HAL库_硬件I2C)

实现目标 1、掌握IIC总线基础知识&#xff1b; 2、会使用软件模拟IIC总线和使用STM32硬件IIC总线&#xff1b; 3、 学会STM32CubeMX软件关于IIC的配置; 4、掌握SHT20温湿度传感器的驱动&#xff1b; 5、具体目标&#xff1a;&#xff08;1&#xff09;用STM32硬件IIC驱动S…

49 序列化和反序列化

本章重点 理解应用层的作用&#xff0c;初识http协议 理解传输层的作用&#xff0c;深入理解tcp的各项特性和机制 对整个tcp/ip协议有系统的理解 对tcp/ip协议体系下的其他重要协议和技术有一定的了解 学会使用一些网络问题的工具和方法 目录 1.应用层 2.协议概念 3. 网络计…

CSRF跨站请求伪造实战

目录 一、定义 二、与XSS的区别 三、攻击要点 四、实战 一、定义 CSRF (Cross-site request forgery&#xff0c;跨站请求伪造)&#xff0c;攻击者利用服务器对用户的信任&#xff0c;从而欺骗受害者去服务器上执行受害者不知情的请求。在CSRF的攻击场景中&#xff0c;攻击…

Django模板层——模板引擎配置

作为Web 框架&#xff0c;Django 需要一种很便利的方法以动态地生成HTML。最常见的做法是使用模板。 模板包含所需HTML 输出的静态部分&#xff0c;以及一些特殊的语法&#xff0c;描述如何将动态内容插入。 模板引擎配置 模板引擎使用该TEMPLATES设置进行配置。这是一个配置列…

C++数据结构——哈希桶HashBucket

目录 一、前言 1.1 闭散列 1.2 开散列 1.3 string 与 非 string 二、哈希桶的构成 2.1 哈希桶的节点 2.2 哈希桶类 三、 Insert 函数 3.1 无需扩容时 3.2 扩容 复用 Insert&#xff1a; 逐个插入&#xff1a; 优缺点比对&#xff1a; 第一种写法优点 第一种写法…

gfast:基于全新Go Frame 2.3+Vue3+Element Plus构建的全栈前后端分离管理系统

gfast&#xff1a;基于全新Go Frame 2.3Vue3Element Plus构建的全栈前后端分离管理系统 随着信息技术的飞速发展和数字化转型的深入&#xff0c;后台管理系统在企业信息化建设中扮演着越来越重要的角色。为了满足市场对于高效、灵活、安全后台管理系统的需求&#xff0c;gfast应…