700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【vue】移动端扫描二维码

【vue】移动端扫描二维码

时间:2022-10-07 09:47:45

相关推荐

【vue】移动端扫描二维码

参考链接:

/gruhn/vue-qrcode-reader/zhangtian_tian/article/details/105226716

1. 效果图

2. 开启 https

需要在 https 协议下才可以调用相机,实现扫码。

可以通过配置 vue.config.js 中的 devServer:{https:true}

或 前端使用Nuxt框架,配置本地https访问 配置本地证书

3. 安装 vue-qrcode-reader

npm i vue-qrcode-reader --save

4. 代码实现

<template><div class="container"><!-- 扫描中心的盒子 --><qrcode-stream class="qrcode" @decode="onDecode" @init="onInit"><div class="center"><span class="border"></span><span class="border"></span><span class="border"></span><span class="border"></span><div class="animate"></div></div></qrcode-stream></div></template><script>import {QrcodeStream } from 'vue-qrcode-reader'export default {components: {QrcodeStream},data() {return {}},methods: {onDecode(result) {window.location.href = result},async onInit(promise) {try {await promise} catch (error) {if (error.name === 'NotAllowedError') {alert('ERROR: 您需要授予相机访问权限')} else if (error.name === 'NotFoundError') {alert('ERROR: 这个设备上没有摄像头')} else if (error.name === 'NotSupportedError') {alert('ERROR: 所需的安全上下文(HTTPS、本地主机)')} else if (error.name === 'NotReadableError') {alert('ERROR: 相机被占用')} else if (error.name === 'OverconstrainedError') {alert('ERROR: 安装摄像头不合适')} else if (error.name === 'StreamApiNotSupportedError') {alert('ERROR: 此浏览器不支持流API')}}}}}</script><style lang="less" scoped>.container {height: 100%;overflow: hidden;.qrcode {height: 100%;background-color: rgba(0, 0, 0, 0.3);.center {width: 200px;height: 200px;position: fixed;background-color: rgba(255, 255, 255, 0.5);top: 50%;left: 50%;transform: translate(-50%, -50%);}.animate {width: 150px;background-color: #41b482;height: 2px;margin: 0 auto;animation: animate 3s infinite;}@keyframes animate {0% {margin-top: 50px;}100% {margin-top: 150px;}}.border {position: absolute;}.border:nth-child(1) {top: 0;left: 0;border-top: 2px solid #41b482;border-left: 2px solid #41b482;width: 10px;height: 10px;}.border:nth-child(2) {top: 0;right: 0;border-top: 2px solid #41b482;border-right: 2px solid #41b482;width: 10px;height: 10px;}.border:nth-child(3) {bottom: 0;left: 0;border-bottom: 2px solid #41b482;border-left: 2px solid #41b482;width: 10px;height: 10px;}.border:nth-child(4) {bottom: 0;right: 0;border-bottom: 2px solid #41b482;border-right: 2px solid #41b482;width: 10px;height: 10px;}}}</style>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。