首页 前端知识 vue h5开发扫描二维码 html5-qrcode(条形码识别不到)

vue h5开发扫描二维码 html5-qrcode(条形码识别不到)

2024-07-30 22:07:37 前端知识 前端哥 365 123 我要收藏

前提

由于涉及到调用手机摄像头,涉及到隐私,必须在HTTPS环境使用。

<template>
	<view class="qrcode">
		<uni-nav-bar left-icon="left" :background-color="' '" :border="false" title="扫码" :fixed="true" @clickLeft="$back" :shadow='true' :leftText='"取消"'>
		</uni-nav-bar>
		<view id="reader"></view>
		<view class="error" v-if="isError">
			<view class="on1">相机权限被拒绝,请尝试如下操作:</view>
			<view>· 刷新页面后重试;</view>
			<view>· 在系统中检测当前App或浏览器的相机权限是否被禁用;</view>
			<view>· 如果依然不能体验,建议在微信中打开链接;</view>
		</view>
	</view>
</template>

<script>
	import {
		Html5Qrcode
	} from "html5-qrcode";
	export default {
		props:{
			isError:{
				type:Boolean,
				default:false
			}
		},
		created() {
			this.getCameras()
		},
		beforeDestroy() {
			this.stop();
		},
		methods: {
			$back(){
				uni.navigateBack()
			},
			getCameras() {
				Html5Qrcode.getCameras()
					.then((devices) => {
						console.log(devices,'sss')
						if (devices && devices.length) {
							this.html5QrCode = new Html5Qrcode("reader");
							this.start();
						}
					})
					.catch((err) => {
						// handle err
						this.html5QrCode = new Html5Qrcode("reader");
						this.error = "ERROR: 您需要授予相机访问权限"
						this.$emit("err", this.error)
					});
			},
			start() {
				//environment后置 user前置
				this.html5QrCode
					.start({
							facingMode: "environment"
						}, {
							fps: 2,
							qrbox: {
								width: 200,
								height: 200
							},
						},
						(decodedText, decodedResult) => {
							this.$emit("ok", decodedText)
						}
					)
					.catch((err) => {
						this.$emit("err", err)
					});
			},
			stop() {
				this.html5QrCode.stop().then((ignore) => {
						// QR Code scanning is stopped.
						console.log("QR Code scanning stopped.");
					})
					.catch((err) => {
						// Stop failed, handle it.
						console.log("Unable to stop scanning.");
					});
			},
		}
	}
</script>

<style  scoped lang="scss" >
	.qrcode {
		position: absolute;
		top: 0;
		left: 0;
		width: 100vw;
		height: 100vh;
		// position: relative;
		background-image: linear-gradient(0deg, transparent 24%, rgba(32, 255, 77, .1) 25%, rgba(32, 255, 77, .1) 26%, transparent 27%, transparent 74%, rgba(32, 255, 77, .1) 75%, rgba(32, 255, 77, .1) 76%, transparent 77%, transparent), linear-gradient(90deg, transparent 24%, rgba(32, 255, 77, .1) 25%, rgba(32, 255, 77, .1) 26%, transparent 27%, transparent 74%, rgba(32, 255, 77, .1) 75%, rgba(32, 255, 77, .1) 76%, transparent 77%, transparent);
		background-size: 3rem 3rem;
		background-position: -1rem -1rem;
		z-index: 10;
		background-color: rgba(17, 17, 17, 0);
		z-index: 999;
	}

	#reader {
		position: absolute;
		top: 50%;
		left: 0;
		transform: translateY(-50%);
		z-index: 1000;
	}

	.error {
		color: #fff;
		padding: 40rpx;
		font-size: 24rpx;
		background-color: #333;
		position: fixed;
		top: 50%;
		left: 50%;
		transform: translate(-50%, -50%);
		width: 630rpx;
		border-radius: 15rpx;
	}
	.on1{
		font-size: 30rpx;
	}
</style>

转载请注明出处或者链接地址:https://www.qianduange.cn//article/14606.html
标签
评论
发布的文章

AE、Lottie、JSON简单介绍

2024-08-12 10:08:42

VSCode配置settings.json

2024-08-12 10:08:42

JSON 格式说明

2024-08-12 10:08:34

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!