溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

FNScanner二維碼接口openView自定義掃碼Demo

發(fā)布時間:2020-05-31 16:31:33 來源:網(wǎng)絡(luò) 閱讀:410 作者:羅那爾劉能 欄目:web開發(fā)

本文出自APICloud官方論壇

FNScanner 模塊是一個二維碼/條形碼掃描器,是 scanner 模塊的優(yōu)化升級版。在 iOS 平臺上本模塊底層集成了 Zbar 和系統(tǒng)自帶的條形碼/二維碼分析庫,由于 IOS 系統(tǒng)平臺在 IOS7.0 以上才開放了二維碼/條碼的相關(guān)接口,所以在 IOS6 上運行時模塊會調(diào)用開源庫 Zbar 去讀取解析二維碼/條碼。只有在 IOS7 以上版本才會調(diào)用系統(tǒng)自帶掃碼功能。

模塊文檔地址:
docs.apicloud.com/Client-API/…

模塊需要注意的地方:

注意:使用本模塊前,需在云編譯頁面勾選添加訪問攝像頭權(quán)限,若要訪問相冊也需溝通申請訪問相冊權(quán)限 。
不能同時使用的模塊:wwprint

本模塊封裝了兩套掃碼方案:
方案一
開發(fā)者通過調(diào)用 openScanner 接口直接打開自帶默認 UI 效果的二維碼/條形碼掃描頁面,本界面相當(dāng)于打開一個 window 窗口,其界面內(nèi)容不支持自定義。用戶可在此界面實現(xiàn)功能如下:
打開關(guān)閉閃關(guān)燈
從系統(tǒng)相冊選取二維碼/條碼圖片進行解密操作
打開攝像頭,自動對焦掃碼想要解析的二維碼/條碼
方案二
通過 openView 接口打開一個自定義大小的掃描區(qū)域(本區(qū)域相當(dāng)于打開一個 frame)進行掃描。開發(fā)者可自行 open 一個 frame 貼在模塊上,從而實現(xiàn)自定義掃描界面的功能。然后配合使用 setFrame、closeView、switchLight 等接口實現(xiàn)開關(guān)閃光燈、重設(shè)掃描界面位置大小、圖片解碼、字符串編碼等相關(guān)功能。詳情請參考模塊接口參數(shù)。

方案一我就不介紹,因為直接調(diào)取接口就能直接顯示一個掃碼ui界面,直接使用就可以, 樓主本帖分享的是方案一無法滿足ui設(shè)計效果前提下,怎么實現(xiàn)ui自定義的效果;

方案二完成頁面截圖
FNScanner二維碼接口openView自定義掃碼Demo

方案二打開閃光燈效果界面截圖
FNScanner二維碼接口openView自定義掃碼Demo

第一步:首先先打開openwin,然后再打開模塊 ,然后延遲打開一個frm自定義一個掃碼見面。大家上面看到掃碼是這種思路的; 廢話不多說上部分核心源碼

var FNScanner, eHeader, headerH;
    apiready = function() {
        //應(yīng)用全局FNScanner模塊
        FNScanner = api.require('FNScanner');
        //定義根據(jù)id獲取dom
        eHeader = $api.byId('header');
        //設(shè)置頭部沉浸式
        $api.fixStatusBar(eHeader);
        //獲取頭部高度
        headerH = $api.offset(eHeader).h;

        //監(jiān)聽?wèi)?yīng)用回到前臺
        api.addEventListener({
            name: 'resume'
        }, function(ret, err) {
            FNScanner.onResume();
        });

        //監(jiān)聽?wèi)?yīng)用回到后臺
        api.addEventListener({
            name: 'pause'
        }, function(ret, err) {
            FNScanner.onPause();
        });

        fnOpenFNScanner();
    }

    function fnOpenFNScanner() {
        // 打開掃碼模塊
        FNScanner.openView({
            //autorotation: true,
            fixedOn: api.frameName,
            rect: {
                x: 0,
                y: headerH,
                w: api.frameWidth,
                h: api.frameHeight
            }
        }, function(ret, err) {
            if (ret) {
                if (ret.eventType == 'success' && ret.content != '') {
                    // 掃碼成功執(zhí)行函數(shù)操作傳值
                    fnOpenCouple(ret.content);
                    return;
                }
                if (ret.eventType == 'cameraError') {
                    api.toast({
                        msg: '請開啟app訪問手機攝像頭權(quán)限',
                        duration: 2000,
                        location: 'bottom'
                    });
                    setTimeout(function() {
                        // 關(guān)閉掃碼器  關(guān)閉掃碼界面
                        back();
                    }, 300);
                    return;
                }
                if (ret.eventType == 'albumError') {
                    api.toast({
                        msg: '請開啟app訪問手機相冊權(quán)限',
                        duration: 2000,
                        location: 'bottom'
                    });
                    setTimeout(function() {
                        back();
                    }, 300);
                    return;
                }
                if (ret.eventType == 'fail') {
                    api.toast({
                        msg: '掃碼失敗,請從新掃碼',
                        duration: 2000,
                        location: 'bottom'
                    });
                    setTimeout(function() {
                        back();
                    }, 300);
                    return;
                }
            } else {
                api.toast({
                    msg: '掃碼錯誤請稍后再試',
                    duration: 2000,
                    location: 'bottom'
                });
                setTimeout(function() {
                    back();
                }, 300);
            }
        });
        setTimeout(function() {
            // 打開掃碼動畫frm頁面
            api.openFrame({
                name: 'add_frm',
                url: './add_frm.html',
                rect: {
                    marginTop: headerH,
                    marginLeft: 0,
                    marginRight: 0,
                    marginBottom: 0
                },
                bgColor: 'rgba(0,0,0,0)',
            });
        }, 300);
    }

    //返回
    function back() {
        // 關(guān)閉win頁面
        api.closeWin();
        // 關(guān)閉掃碼模塊
        FNScanner.closeView();
    }

    //打開最后掃碼得出的數(shù)值
    function fnOpenCouple(content) {
        console.warn(content);
        back(); //建議打開下一頁我這塊只是為了方便直接調(diào)用返回按鈕   掃碼成功之后必須關(guān)閉掃碼模塊  不然會出現(xiàn)多次掃碼情況
    }

    var isSOff = true;
    // 打開閃光燈
    function fnOpenLamp() {
        if (isSOff) {
            FNScanner.switchLight({
                status: 'on'
            });
            isSOff = false;
        } else {
            FNScanner.switchLight({
                status: 'off'
            });
            isSOff = true;
        }
    }
復(fù)制代碼
向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI