h5-二維碼掃碼(一)

一、簡介

采用html5-qrcode方案,需要https協(xié)議,優(yōu)點集成簡單、底層依賴Zxing-js
功能強大噩死、兼容pc/mac、android神年、iOS甜滨,缺點目前還不能定制掃碼界面(應(yīng)該是自己能力不夠),停止掃碼瘤袖,自帶的掃碼界面就不會顯示

二衣摩、集成

1、通過npm引入

npm install html5-qrcode

2捂敌、html直接引入

<script src="https://unpkg.com/html5-qrcode" type="text/javascript">

3艾扮、使用

// To use Html5QrcodeScanner (more info below)
import {Html5QrcodeScanner} from "html5-qrcode"

// To use Html5Qrcode (more info below)
import {Html5Qrcode} from "html5-qrcode"

三、例子

1占婉、在components文件夾下面新建qrcode文件夾泡嘴,并新建qrcode.vue,代碼如下

<template>
    <div id="qrcode-reader" style="width: 100%;"></div>
</template>

<script>
    import { Html5Qrcode, Html5QrcodeScannerState } from "html5-qrcode"
    
    export default {
        components:{

        },
        data(){
            return{
                html5Qrcode: null
            }
        },
        created() {
        
        },
        mounted() {
            this.initScan();
            this.startScan();
        },
        beforeDestroy() {
            let state = this.html5QrCode.getState();
            if (state == Html5QrcodeScannerState.SCANNING) {
                this.stopScan();
            }
        },
        methods : {
            // 初始化掃碼控件
            initScan() {
                this.html5QrCode = new Html5Qrcode("qrcode-reader");
            },
            // 開始掃碼
            startScan() {
                let that = this;
                // 設(shè)置寬度為最小邊的百分之64%
                let qrboxFunction = function(viewfinderWidth, viewfinderHeight) {
                    let minEdgePercentage = 0.64; // 64%
                    let minEdgeSize = Math.min(viewfinderWidth, viewfinderHeight);
                    let qrboxSize = Math.floor(minEdgeSize * minEdgePercentage);
                    return {
                        width: qrboxSize,
                        height: qrboxSize
                    };
                }
                const config = { fps: 10, qrbox: qrboxFunction };
                const qrCodeSuccessCallback = (decodedText, decodedResult) => {
                    that.stopScan(decodedText);
                };
                const qrCodeErrorCallback = (errorMessage, error) => {
                    
                };
                this.html5QrCode.start(
                    { 
                        facingMode: { exact: "environment"} 
                    }, 
                    config, 
                    qrCodeSuccessCallback, 
                    qrCodeErrorCallback
                )
                .catch((err) => {
                    var errMsg = '';
                    if (err.indexOf('NotAllowedError') != -1) {
                        errMsg = 'ERROR: 您需要授予相機訪問權(quán)限';
                    } else if (err.indexOf('NotFoundError') != -1) {
                        errMsg = 'ERROR: 這個設(shè)備上沒有攝像頭';
                    } else if (err.indexOf('NotSupportedError') != -1) {
                        errMsg = 'ERROR: 所需的安全上下文(HTTPS逆济、本地主機)';
                    } else if (err.indexOf('NotReadableError') != -1 )  {
                        errMsg = 'ERROR: 相機被占用';
                    } else if (err.indexOf('OverconstrainedError') != -1) {
                        errMsg = 'ERROR: 安裝攝像頭不合適';
                    } else if (err.indexOf('StreamApiNotSupportedError') != -1) {
                        errMsg = 'ERROR: 此瀏覽器不支持流API';
                    } else {
                        errMsg = err;
                    }
                    that.$toast(errMsg);
                });
            },
            stopScan(text) {
                let that = this;
                this.html5QrCode.stop().then((ignore) => {
                  // QR Code scanning is stopped.
                }).catch((err) => {
                  // Stop failed, handle it.
                }).finally(() => {
                    if (!!text) {
                        that.$emit('success', text);
                    }
                });
            }
        }
    }
</script>

<style lang="less" scoped>
    
</style>

2酌予、在使用的模塊新建scan-code.vue應(yīng)用qrcode組件,代碼如下

<template>
    <div class="g-content">
        <qrcode @success="scanResult"></qrcode >
    </div>
</template>

<script>
    import qrcode from '@/components/qrcode/qrcode.vue';
    
    export default {
        name: 'scan',
        components:{
            qrcode
        },
        data(){
            return{
                
            }
        },
        created() {

        },
        methods : {
            scanResult(text) {
                // 成功回調(diào)奖慌,具體業(yè)務(wù)自己實現(xiàn)
                this.$store.commit('setScanResult', text);
                this.$router.go(-1);
            }
        }
    }
</script>

<style lang="less" scoped>
</style>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末抛虫,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子简僧,更是在濱河造成了極大的恐慌建椰,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,423評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件岛马,死亡現(xiàn)場離奇詭異棉姐,居然都是意外死亡,警方通過查閱死者的電腦和手機啦逆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,147評論 2 385
  • 文/潘曉璐 我一進(jìn)店門伞矩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人夏志,你說我怎么就攤上這事乃坤。” “怎么了?”我有些...
    開封第一講書人閱讀 157,019評論 0 348
  • 文/不壞的土叔 我叫張陵侥袜,是天一觀的道長。 經(jīng)常有香客問我溉贿,道長枫吧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,443評論 1 283
  • 正文 為了忘掉前任宇色,我火速辦了婚禮九杂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宣蠕。我一直安慰自己例隆,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,535評論 6 385
  • 文/花漫 我一把揭開白布抢蚀。 她就那樣靜靜地躺著镀层,像睡著了一般。 火紅的嫁衣襯著肌膚如雪皿曲。 梳的紋絲不亂的頭發(fā)上唱逢,一...
    開封第一講書人閱讀 49,798評論 1 290
  • 那天,我揣著相機與錄音屋休,去河邊找鬼坞古。 笑死,一個胖子當(dāng)著我的面吹牛劫樟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,941評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼村斟,長吁一口氣:“原來是場噩夢啊……” “哼怯屉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起附较,我...
    開封第一講書人閱讀 37,704評論 0 266
  • 序言:老撾萬榮一對情侶失蹤尿瞭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后翅睛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體声搁,經(jīng)...
    沈念sama閱讀 44,152評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,494評論 2 327
  • 正文 我和宋清朗相戀三年捕发,在試婚紗的時候發(fā)現(xiàn)自己被綠了疏旨。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,629評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡扎酷,死狀恐怖檐涝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤谁榜,帶...
    沈念sama閱讀 34,295評論 4 329
  • 正文 年R本政府宣布幅聘,位于F島的核電站,受9級特大地震影響窃植,放射性物質(zhì)發(fā)生泄漏帝蒿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,901評論 3 313
  • 文/蒙蒙 一巷怜、第九天 我趴在偏房一處隱蔽的房頂上張望葛超。 院中可真熱鬧,春花似錦延塑、人聲如沸绣张。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽侥涵。三九已至,卻和暖如春宋雏,著一層夾襖步出監(jiān)牢的瞬間独令,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,978評論 1 266
  • 我被黑心中介騙來泰國打工好芭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留燃箭,地道東北人。 一個月前我還...
    沈念sama閱讀 46,333評論 2 360
  • 正文 我出身青樓舍败,卻偏偏與公主長得像招狸,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子邻薯,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,499評論 2 348

推薦閱讀更多精彩內(nèi)容