vue2移动端使用vue-qrcode-reader实现扫一扫功能的步骤

 更新时间:2023年06月19日 15:38:08   作者:Lizy!  
最近在使用vue开发的h5移动端想要实现一个调用摄像头扫描二维码的功能,所以下面这篇文章主要给大家介绍了关于vue2移动端使用vue-qrcode-reader实现扫一扫功能的相关资料,需要的朋友可以参考下

移动端实现扫一扫   扫码功能

第一种:如果是用uniapp开发  可以直接使用uni的语法 并且兼容多端

第二种:如果是开发浏览器的网页,基于微信的话,也可以用微信的weixin-js-sdk

        具体流程参考官网:概述 | 微信开放文档

第三种:用第三方vue-qrcode-reader实现扫一扫功能,

        详细流程参考官网:Simple | Vue Qrcode Reader

以下内容为用vue-qrcode-reader实现扫一扫功能步骤

1.下载vue-qrcode-reader依赖

//   npm 下载

npm install --save vue-qecode-reader

//   cnpm 下载

cnpm install --save vue-qrcode-reader

 2.此次流程是在A页面添加扫一扫button,然后点击跳转到B页面,然后扫一扫写在B页面,进入B页面初始化,然后同意使用相机,在扫描到二维码后携带扫到的内容跳转到A页面

代码如下

<template>
    <div class="saoma">
        <qrcode-stream  @decode="onDecode" @init="onInit" style="height: 100vh;width:100vw">
            <div>
                <div class="qr-scanner">
                <div class="box">
                    <div class="line"></div>
                    <div class="angle"></div>
                </div>
                </div>
            </div>
        </qrcode-stream>
    </div>
</template>
<script>
    import {
        QrcodeStream
    } from 'vue-qrcode-reader';
    export default {
        components: {
            QrcodeStream
        },
        data() {
            return {
                result: '', // 扫码结果信息
                error: '' // 错误信息
            }
        },
        methods: {
            onDecode(result) {
                if(result){
                    this.$router.push({
                        path:'/',
                        query: {
                            code:result,
                        }
                    })
                }
            },
            async onInit(promise) {
                try {
                    await promise
                } catch (error) {
                    if (error.name === 'NotAllowedError') {
                        window.alert('您需要授予相机访问权限')
                        this.$router.push({path:'/'})
                    } else if (error.name === 'NotFoundError') {
                        this.$router.push({path:'/'})
                        window.alert('这个设备上没有摄像头')
                    } else if (error.name === 'NotSupportedError') {
                        this.$router.push({path:'/'})
                        window.alert('所需的安全上下文(HTTPS、本地主机)')
                    } else if (error.name === 'NotReadableError') {
                        this.$router.push({path:'/'})
                        window.alert('相机被占用')
                    } else if (error.name === 'OverconstrainedError') {
                        this.$router.push({path:'/'})
                        window.alert('安装摄像头不合适')
                    } else if (error.name === 'StreamApiNotSupportedError') {
                        this.$router.push({path:'/'})
                        window.alert('此浏览器不支持流API')
                    }
                }
            },
        }
    }
</script>
<style scoped>
    .saoma {
        width: 100vw;
        height: 100vh;
    }
    .qr-scanner {
    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;
        width: 100%;
        /* height: 100%; */
        height: 100vh;
        position: relative;
        background-color: #1110;
      /* background-color: #111; */
    }
    .qr-scanner .box {
        width: 213px;
        height: 213px;
        position: absolute;
        left: 50%;
        top: 50%;
        transform: translate(-50%, -50%);
        overflow: hidden;
        border: 0.1rem solid rgba(0, 255, 51, 0.2);
        /* 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%, #00ff33 211%);
        border-bottom: 3px solid #00ff33;
        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: #00ff33;
    }
    .qr-scanner .angle:after,
    .qr-scanner .angle:before {
        bottom: 0;
        border-bottom-color: #00ff33;
    }
    .qr-scanner .box:before,
    .qr-scanner .angle:before {
        left: 0;
        border-left-color: #00ff33;
    }
    .qr-scanner .box:after,
    .qr-scanner .angle:after {
        right: 0;
        border-right-color: #00ff33;
    }
    @keyframes radar-beam {
        0% {
            transform: translateY(-100%);
        }
        100% {
            transform: translateY(0);
        }
    }
</style>

以上内容即为使用vue-qrcode-reader实现扫一扫功能的流程

可以直接复制粘贴使用哦

总结

到此这篇关于vue2移动端使用vue-qrcode-reader实现扫一扫功能的文章就介绍到这了,更多相关vue2实现扫一扫功能内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue2利用Bus.js如何实现非父子组件通信详解

    vue2利用Bus.js如何实现非父子组件通信详解

    这篇文章主要给大家介绍了关于vue2利用Bus.js如何实现非父子组件通信的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧。
    2017-08-08
  • 基于vue-cli3创建libs库的实现方法

    基于vue-cli3创建libs库的实现方法

    这篇文章主要介绍了基于vue-cli3创建libs库的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • 使用axios请求接口,几种content-type的区别详解

    使用axios请求接口,几种content-type的区别详解

    今天小编就为大家分享一篇使用axios请求接口,几种content-type的区别详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • element的el-tree多选树(复选框)父子节点关联不关联

    element的el-tree多选树(复选框)父子节点关联不关联

    最近想要实现多选框关联的功能,但是却出现了element的el-tree多选树(复选框)父子节点关联不关联的问题,本文就来介绍一下解决方法,一起来了解一下
    2021-05-05
  • vue实现商城秒杀倒计时功能

    vue实现商城秒杀倒计时功能

    这篇文章主要介绍了vue实现商城秒杀倒计时功能,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • Vue+SpringBoot前后端分离中的跨域问题

    Vue+SpringBoot前后端分离中的跨域问题

    在前后端分离开发中,需要前端调用后端api并进行内容显示,所以本文就介绍了Vue+SpringBoot前后端分离跨域问题,感兴趣的可以了解一下
    2021-08-08
  • Vue.js中的computed功能设计

    Vue.js中的computed功能设计

    computed作为计算属性其作用是描述响应式数据的复杂逻辑计算,当所依赖的响应式数据发生改变时计算属性会重新计算,更新逻辑计算的结果,这篇文章主要介绍了Vue.js中的computed的功能设计,需要的朋友可以参考下
    2023-06-06
  • electron-builder打包vue2项目问题总结

    electron-builder打包vue2项目问题总结

    这篇文章主要介绍了electron-builder打包vue2项目问题总结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-08-08
  • vue实现轮播图帧率播放

    vue实现轮播图帧率播放

    这篇文章主要为大家详细介绍了vue实现轮播图帧率播放,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-01-01
  • vue中的scope使用详解

    vue中的scope使用详解

    这篇文章主要介绍了vue中的scope使用详解,需要的朋友可以参考下
    2017-10-10

最新评论