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

js浏览器实现简单的实时扫一扫功能

描述:利用vue-qrcode-reader插件实现h5/wap端简单的扫一扫功能
参考文档:https://gruhn.github.io/vue-qrcode-reader/demos/Validate.html官方文档

安装插件
npm i --save vue3-qr-reader

yarn add vue3-qr-reader

注意项目运行必须在https下,http的链接下无法调取摄像头的功能

vue中的代码

<template><div class="page-scan"><div class="scan-box"><video ref="video"id="video"class="scan-video"autoplay></video><div class="qr-scanner"><div class="box"><div class="line"></div><div class="angle"></div></div></div><div class="scan-tip">验证码:{{ scanResult }}</div></div></div>
</template><script>
import { BrowserMultiFormatReader } from '@zxing/library'
export default {name: 'scanCodePage',data() {return {scanTextData: {codeReader: null,tipMsg: '识别二维码',// 这个,就是当前调用的摄像头的索引,为什么是6,我会在后面说的 华为手机是鸿蒙系统有8个摄像头num: 5,// 这个就是扫描到的摄像头的数量videoLength: ''},hasBind: false,scanResult: ''}},props: {show: {type: Boolean,default: false}},mounted() {this.scanTextData.codeReader = new BrowserMultiFormatReader()this.openScan() // 打开摄像头},watch: {show(val) {if (!val) {// 关闭摄像头if (!document.getElementById('video')) {alert('请授权')return}let thisVideo = document.getElementById('video')thisVideo.srcObject.getTracks()[0].stop()this.scanTextData.codeReader.reset()} else {if (this.scanTextData.codeReader === null) {this.scanTextData.codeReader = new BrowserMultiFormatReader()}this.openScan()}}},methods: {async openScan() {this.scanTextData.codeReader.getVideoInputDevices().then((videoInputDevices) => {// 默认获取第一个摄像头设备idlet firstDeviceId = videoInputDevices[0].deviceIdconsole.log('手机摄像头的数量',videoInputDevices.length,videoInputDevices)// 获取第一个摄像头设备的名称const videoInputDeviceslablestr = JSON.stringify(videoInputDevices[0].label)if (videoInputDevices.length > 1) {// 华为手机有6个摄像头,前三个是前置,后三个是后置,第6个摄像头最清晰if (videoInputDevices.length > 5) {firstDeviceId = videoInputDevices[5].deviceId} else {// 判断是否后置摄像头if (videoInputDeviceslablestr.indexOf('back') > -1) {firstDeviceId = videoInputDevices[0].deviceId} else {firstDeviceId = videoInputDevices[1].deviceId}}}this.decodeFromInputVideoFunc(firstDeviceId)}).catch((err) => {console.error(err)})},decodeFromInputVideoFunc(firstDeviceId) {this.scanTextData.codeReader.reset()this.scanTextData.codeReader.decodeFromInputVideoDeviceContinuously(firstDeviceId,'video',(result, err) => {if (result && result.text) {this.handleResult(result.text)}if (err && !err) {console.log(err)this.$toast.fail(err)}})},handleResult(scanResult) {console.log('扫描二维码获取的参数',scanResult)},destroyed() {this.scanTextData.codeReader.reset() // 重置摄像头}
}
</script><style  scoped>
.scan-box {position: fixed;top: 0;left: 0;height: 100%;width: 100vw;background-image: linear-gradient(0deg,transparent 24%,rgba(32, 255, 77, 0.1) 25%,rgba(32, 255, 77, 0.1) 26%,transparent 27%,transparent 74%,rgba(32, 255, 77, 0.1) 75%,rgba(32, 255, 77, 0.1) 76%,transparent 77%,transparent),linear-gradient(90deg,transparent 24%,rgba(32, 255, 77, 0.1) 25%,rgba(32, 255, 77, 0.1) 26%,transparent 27%,transparent 74%,rgba(32, 255, 77, 0.1) 75%,rgba(32, 255, 77, 0.1) 76%,transparent 77%,transparent);background-size: 3rem 3rem;background-position: -1rem -1rem;
}.scan-video {height: 213px;width: 213px;object-fit: cover;position: absolute;left: 50%;top: 50%;transform: translate(-50%, -50%);
}.qr-scanner .box {width: 213px;height: 213px;position: absolute;left: 50%;top: 50%;transform: translate(-50%, -50%);overflow: hidden;/* border: 0.1rem solid #488aff; *//* background: url('http://resource.beige.world/imgs/gongconghao.png') no-repeat center center; */
}.qr-scanner .line {height: calc(100% - 2px);width: 100%;background: linear-gradient(180deg, rgba(0, 255, 51, 0) 43%, #022ff5 211%);border-bottom: 3px solid #488aff;transform: translateY(-100%);animation: radar-beam 2s infinite alternate;animation-timing-function: cubic-bezier(0.53, 0, 0.43, 0.99);animation-delay: 1.4s;
}.qr-scanner .box:after,
.qr-scanner .box:before,
.qr-scanner .angle:after,
.qr-scanner .angle:before {content: '';display: block;position: absolute;width: 3vw;height: 3vw;border: 0.2rem solid transparent;
}.qr-scanner .box:after,
.qr-scanner .box:before {top: 0;border-top-color: #488aff;
}.qr-scanner .angle:after,
.qr-scanner .angle:before {bottom: 0;border-bottom-color: #022ff5;
}.qr-scanner .box:before,
.qr-scanner .angle:before {left: 0;border-left-color: #022ff5;
}.qr-scanner .box:after,
.qr-scanner .angle:after {right: 0;border-right-color: #022ff5;
}@keyframes radar-beam {0% {transform: translateY(-100%);}100% {transform: translateY(0);}
}.scan-tip {width: 100vw;text-align: center;margin-bottom: 5vh;color: white;font-size: 5vw;position: absolute;bottom: 50px;left: 0;color: #fff;
}.page-scan {overflow-y: hidden;
}
</style>

相关文章:

js浏览器实现简单的实时扫一扫功能

描述&#xff1a;利用vue-qrcode-reader插件实现h5/wap端简单的扫一扫功能 参考文档&#xff1a;https://gruhn.github.io/vue-qrcode-reader/demos/Validate.html官方文档 安装插件 npm i --save vue3-qr-reader 或 yarn add vue3-qr-reader 注意项目运行必须在https下&…...

unity愤怒的小鸟学习制作(二)

终于又开始了啦啦啦&#xff0c;我有一个自己的相机了&#xff0c;真开心&#xff0c;诶嘿 视频链接和素材如下&#xff1a;视频 小鸟的飞出 想要让小鸟在拉开弹弓之后能飞出去&#xff0c;就必须让这个组件失活&#xff0c;如下 所以我们更改脚本内容&#xff0c;加入&#…...

干外包3年,彻底寄了...

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近6年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了6年的功能测试&…...

软考高项论文范文(三)

论信息系统项目的沟通管理 【摘要】&#xff08;该摘要共313个字符&#xff09; 本文讨论了ⅹⅹ省社保系统民政统一软件开发项目的沟通管理。该项目是在国家大社会保险政策指导下于2018年10月份正式启动的。该系统为用户提供了优抚安置、救灾救济等十大主要业务功能。在本文中…...

浅谈谈谈OTA召回2023

近日&#xff0c;国家市场监督管理总局发布特斯拉召回公告&#xff0c;一下子掀起了互联网热议&#xff0c;这次召回的范围是在2019年1月12日至2023年4月24日期间国内销售特斯拉汽车&#xff08;含国产和进口共计110万辆车&#xff09;&#xff0c;在这个召回公告中有两点值得关…...

【GDI+】旋转文本/斜体字

一、需求 想要绘制如下所示的斜体字&#xff0c;45度 二、分析&思路 Graphics类有个 RotateTransform方法&#xff0c;可以传入任意角度的值来旋转画板。但是这个方法的旋转中心是画板的左上角&#xff0c;所以直接单单用这个方法不能满足我们的需求。此外&#xff0c; G…...

python3 面试题总结

Python global 语句的作用lambda 匿名函数好处Python 错误处理Python 内置错误类型简述 any() 和 all() 方法Python 中什么元素为假&#xff1f;提高 Python 运行效率的方法Python 单例模式为什么 Python 不提供函数重载实例方法/静态方法/类方法__new__和 __init __方法的区别…...

select poll epoll有什么区别

select/poll select 实现多路复用的方式是&#xff0c;将已连接的 Socket 都放到一个文件描述符集合&#xff0c;然后调用 select 函数将文件描述符集合拷贝到内核里&#xff0c;让内核来检查是否有网络事件产生&#xff0c;检查的方式很粗暴&#xff0c;就是通过遍历文件描述…...

Java基础面试题突击系列1

&#x1f469;&#x1f3fb; 作者&#xff1a;一只IT攻城狮 &#xff0c;关注我不迷路 ❤️《java面试核心知识》突击系列&#xff0c;持续更新… &#x1f490; 面试必知必会学习路线&#xff1a;Java技术栈面试系列SpringCloud项目实战学习路线 &#x1f4dd;再小的收获x365天…...

go-zero和dtm分布式事务实现

go-zero是一个基于Go语言的微服务开发框架&#xff0c;而DTM&#xff08;Distributed Transaction Manager&#xff09;是一个分布式事务管理器&#xff0c;用于实现跨多个微服务的分布式事务。 下面是使用go-zero和DTM实现分布式事务的基本步骤&#xff1a; 安装和配置DTM&am…...

Springboot +Flowable,会签、或签简单使用(一)

一.简介 **会签&#xff1a;**在一个流程中的某一个 Task 上&#xff0c;这个 Task 需要多个用户审批&#xff0c;当多个用户全部审批通过&#xff0c;或者多个用户中的某几个用户审批通过&#xff0c;就算通过。 例如&#xff1a;之前的请假流程&#xff0c;假设这个请假流程…...

银行面试中的即兴演讲技巧,你了解吗

面试的主要形式有无领导小组讨论、结构化和半结构化面试&#xff0c;一些银行还会出现辩论赛、角色扮演、即兴演讲等形式&#xff0c;今天小编就来聊一聊面试中的即兴演讲&#xff0c;从如信银行考试中心了解到&#xff1a; 简单来说即兴演讲就是在特定情境下&#xff0c;自发或…...

基于LT6911UXC的LVDS视频接口调试经验

文章目录 概要整体架构流程技术名词解释技术细节小结概要 项目方案采用龙讯半导体LT6911系列 整体架构流程 CPU主芯片采用飞腾,显卡采用GP102,由于项目需要LVDS接口,GP102的HDMI口输出后经过LT6911UXC转成LVDS输出 在本方案中有两种显示屏;一个是10.4寸,一个是15.6寸。…...

【C++】OpenMP简介

一、背景知识 1、program作用 #pragma 是 C 和 C 语言中的一个预处理指令。它主要用于向编译器发送特定的信息或者指示&#xff0c;以便控制编译过程。#pragma 通常与编译器特定的选项或功能一起使用&#xff0c;因此它的具体行为和实现可能因不同的编译器而有所不同。 #pra…...

Unity HybridCLR 热更工具学习日记(一)

目录 导入HybridCLR包、安装设置相关选项 导入HybridCLR包 先找到HybridCLR包的git地址&#xff1a;https://github.com/focus-creative-games/hybridclr 复制包的http地址&#xff0c;打开unity - window - package Manager&#xff1b;点击左上角的 选择Add Package for…...

内网渗透(七十五)之域权限维持之DCShadow

DCShadow 2018年1月24日,在BlueHat安全会议上,安全研究员Benjamin Delpy 和 Vincent Le Toux 公布了针对微软活动目录域的一种新型攻击技术------DCShaow。利用该攻击技术,具有域管理员权限或企业管理员权限的恶意攻击者可以创建恶意域控,然后利用域控间正常同步数据的功能…...

JAVA日常练习—习题5

1.机器人类及其子类 设计一个机器人的抽象类&#xff0c;具有质量&#xff08;double&#xff09;、名字&#xff08;String&#xff09;等属性&#xff1b;具有设置属性值方法和获得并打印属性值的方法&#xff0c;还有一个运动的抽象方法move()。设计电动汽车类和飞行器类&a…...

nuitka打包python的PyQt5成exe可执行文件

使用nuitka打包python的PyQt5 可以打包多文件,也可以打包单文件。 使用的python版本是3.8.10 1、下载gcc 方式1:可以到网站下载,点我跳转 方式2:可以直接去网盘下载,点我跳转 提取码:8888 网盘里面也有python3.8.10的安装包,下载后直接安装即可。 下载64位 win…...

数据(安全)治理面临的挑战和机遇

数据治理,数据安全治理面临的挑战就是该市场的机遇,国内外相关实践和成功的商业案例是存在的,国内目前实施主要不在考虑主体数据或另开一个新项目进行数据采集,清洗,展示,但很少有真正的通过深度学习工具提升企业运营效能,正如我上一篇(湖仓智能应用简论-数据驱动设计_…...

Java后端入职第三天,使用CompletableFuture优化查询接口

一、需求背景 相信大家入职到一个新公司(xinkeng),一般都会被分配去解决千古难题(caipigu),这些问题大概率很多不想去解决,并且代码很多复杂,各种套娃。领导为检验新人的能力,就会去让新人去解决这种问题,一方面可以了解业务代码,还能顺手把没人愿意做的事做了。但…...

别再只调Prompt了!用Dify工作流搞定RAG召回率,我的PDF问答准确率从60%提到了95%

从60%到95%&#xff1a;Dify工作流如何重构PDF问答系统的召回逻辑 在构建基于PDF文档的知识问答系统时&#xff0c;许多开发者都经历过这样的困境&#xff1a;精心设计的提示词&#xff08;Prompt&#xff09;和看似合理的检索流程&#xff0c;最终问答准确率却卡在60%左右难以…...

龙芯k - 走马观碑组ST驱动移植唐

正文 异步/等待解决了什么问题&#xff1f; 在传统同步I/O操作中&#xff08;如文件读取或Web API调用&#xff09;&#xff0c;调用线程会被阻塞直到操作完成。这在UI应用中会导致界面冻结&#xff0c;在服务器应用中则造成线程资源的浪费。async/await通过非阻塞的异步操作解…...

从20.03 SP3到24.03 LTS:我的openEuler大版本升级实战与避坑全记录

从20.03 SP3到24.03 LTS&#xff1a;我的openEuler大版本升级实战与避坑全记录 去年夏天&#xff0c;当我第一次在服务器监控面板上看到"openEuler 20.03-LTS-SP3即将停止维护"的警告时&#xff0c;就知道一场硬仗要来了。作为团队里负责基础设施的"老运维"…...

幻觉不是Bug,是系统性失效:SITS2026定义的5级幻觉危害图谱与对应SLA保障阈值(2026新规速读版)

第一章&#xff1a;幻觉不是Bug&#xff0c;是系统性失效&#xff1a;SITS2026新规核心范式跃迁 2026奇点智能技术大会(https://ml-summit.org) 在SITS2026&#xff08;Systemic Integrity & Trustworthiness Standard 2026&#xff09;框架下&#xff0c;“幻觉”被正式…...

【复习】最小生成树 Kruskal

&#x1f468;‍&#x1f4bb; 关于作者&#xff1a;会编程的土豆 “不是因为看见希望才坚持&#xff0c;而是坚持了才看见希望。” 你好&#xff0c;我是会编程的土豆&#xff0c;一名热爱后端技术的Java学习者。 &#x1f4da; 正在更新中的专栏&#xff1a; 《数据结构与算…...

如何快速掌握FanControl:Windows风扇智能控制的终极免费方案

如何快速掌握FanControl&#xff1a;Windows风扇智能控制的终极免费方案 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trend…...

Hexo Admin实战指南:打造高效本地Markdown博客管理后台

1. 为什么你需要Hexo Admin&#xff1f; 如果你正在使用Hexo搭建静态博客&#xff0c;肯定遇到过这样的烦恼&#xff1a;每次写新文章都要打开终端&#xff0c;输入hexo new post "文章标题"&#xff0c;然后在生成的Markdown文件里手动编辑。这种操作不仅繁琐&…...

高效实现分组内跨行时间戳匹配:构建 user_rejects 布尔标识列

本文介绍如何在大规模数据集&#xff08;百万级行、每组15–25行&#xff09;中&#xff0c;基于 application_id 分组&#xff0c;高效判断每行的 rejected_time 是否等于同组内任意其他行的 selected_time&#xff0c;并生成整数型布尔列 user_rejects。 本文介绍如何在…...

第21届智能车竞赛走马观碑组赛道元素与目标板识别策略解析

1. 走马观碑组赛道核心元素解析 参加智能车竞赛走马观碑组的同学都知道&#xff0c;赛道设计是比赛中最关键的变量之一。我参加过三届比赛&#xff0c;发现很多新手队伍在前期准备时&#xff0c;往往把大量精力放在代码编写上&#xff0c;却忽略了赛道元素的系统分析&#xff0…...

Python零成本实现京东商品价格监控+库存预警,自动薅羊毛全攻略

一、引言 相信大家都有过这样的经历&#xff1a;看中一款心仪已久的商品&#xff0c;天天刷京东看价格&#xff0c;结果刚买完第二天就降价&#xff1b;或者某款热门产品一直缺货&#xff0c;好不容易有货了却没抢到&#xff0c;白白错过优惠。手动监控不仅费时费力&#xff0c…...