赞
踩
由于涉及到调用手机摄像头,涉及到隐私,必须在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>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。