摄像头扫码功能封装

(1) 第一版:实现前置摄像头扫码

  • index.vue中调用
//前置扫码
        frontScan:function(){
            // #ifdef APP-PLUS
            const myScanCode = uni.requireNativePlugin('My-ScanCode');
            var options = {
                scanType:['QR,EAN13,EAN8,PDF_417'],//扫码类型
                prompt:'将二维码/条形码放入框内,即可自动扫描',//扫码提示语
                // locked:true,//方向是否锁定、旋转(默认true)
                // beepEnabled:true,//扫码完成是否有提示音(默认true)
                // imageEnabled:false,//扫码成功时是否保存二维码图片(默认false)
                cameraId : 1, //使用指定的相机ID(前1后0摄像头,默认0)
            };
            console.log("scanTest5-start");
            myScanCode.scanCode(options, res => {//res:{"result":"https://qr.alipay.com/cpx05564fwylkybgq7dxjb9","scanType":"QR_CODE","success":"true"}
                console.log("扫码res:" + JSON.stringify(res));
                uni.showModal({
                    title: '条码类型:' + res.scanType + "",
                    content: '条码内容:' + res.result + ""
                });
            });
            console.log("scanTest5-end");
            // #endif   
        },

(2) 第二版:实现前置或后置扫码

  • setting.vue中设置为前置或后置来扫码
<template>
    <view class="container">
        <view class="uni-flex uni-column">      
            <view class="margin-right-sm" @tap="modifyCameraId">
                <view v-if="cameraId=='0'">
                    <text class="cuIcon-camera text-blue"><text class="text-gray">后</text></text>
                </view>
                <view v-else>
                    <text class="cuIcon-camerafill text-blue"><text class="text-gray">前</text></text>
                </view>
            </view>
        </view>
    </view>
</template>

<script>
var _self,
export default {
    data() {
        return {
            cameraId:"1",
        }
    },
    methods: {
        modifyCameraId:function(){
            var cameraId = _self.getCameraId();
            if(cameraId=="0"){
                _self.cameraId = "1";
                _self.setCameraId("1");
            }else{
                _self.cameraId = "0";
                _self.setCameraId("0");
            }
        },
    },
    onLoad:function(){
        _self = this;   
    },
  
};
</script>

<style> 
.container{
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 0;
    display: flex;
    align-items: center; /*元素垂直居中*/
    justify-content: center; /*元素水平居中*/
    background-color: #efeff4;
}

</style>

  • main.js
//cameraId
Vue.prototype.cameraKey = "camera_jk";
Vue.prototype.getCameraId = function(){
    var _self = this;
    // return uni.getStorageSync(_self.cameraKey) || 1;//类型为整型时的错误写法:恒为1
    return uni.getStorageSync(_self.cameraKey) || "1";//默认为1
    // return uni.getStorageSync(_self.cameraKey) === 0 ? 0 : 1;//类型为整型尚未测试(页面中类型也需进行修改)
    
},
Vue.prototype.setCameraId = function(cameraId){
    var _self = this;
    uni.setStorageSync(_self.cameraKey,cameraId);
},
  • index.vue中调用
//前置扫码
frontScan:function(){
    // #ifndef H5

    const myScanCode = uni.requireNativePlugin('My-ScanCode');
    var options = {
        scanType:['QR','EAN13','EAN8','PDF_417'],//扫码类型
        prompt:'将二维码/条形码放入框内,即可自动扫描',//扫码提示语
        //locked:true,//方向是否锁定、旋转(默认true)
        //beepEnabled:true,//扫码完成是否有提示音(默认true)
        //imageEnabled:false,//扫码成功时是否保存二维码图片(默认false)
        //cameraId : 1, //使用指定的相机ID(摄像头前1后0,默认0)
        cameraId : _self.cameraId,  // this.getCameraId()
    };
    myScanCode.scanCode(options, res => {//{"result":"https://qr.alipay.com/cpx05564fwylkybgq7dxjb9","scanType":"QR_CODE","success":"true"}
        console.log("扫码res:" + JSON.stringify(res));
        uni.showModal({
            title: '条码类型:' + res.scanType + "",
            content: '条码内容:' + res.result + ""
        });
    });
            
    // #endif   
},

(3) 第二版:封装

  • main.js中封装
Vue.prototype.gotoScanCode = function(param){
    const myScanCode = uni.requireNativePlugin('My-ScanCode');
    var cameraId_string = this.getCameraId();
    var cameraId_int = parseInt(cameraId_string);
    
    var options = {
        scanType:['QR','EAN13','EAN8','PDF_417'],//扫码类型
        prompt:'将二维码/条形码放入框内,即可自动扫描',//扫码提示语
        // locked:true,//方向是否锁定、旋转(默认true)
        // beepEnabled:true,//扫码完成是否有提示音(默认true)
        // imageEnabled:false,//扫码成功时是否保存二维码图片(默认false)
        // cameraId : 1, //使用指定的相机ID(摄像头前1后0,默认0)
        cameraId : cameraId_int,
    };
    myScanCode.scanCode(options, res => {//res:{"result":"https://qr.alipay.com/cpx05564fwylkybgq7dxjb9","scanType":"QR_CODE","success":"true"}
        console.log("gotoScanCode-扫码res:" + JSON.stringify(res));
        // uni.showModal({
        //  title: '条码类型:' + res.scanType + "",
        //  content: '条码内容:' + res.result + ""
        // });
        if(res.result && res.result != "" && res.result != "用户取消" ){
            typeof param.success == "function" && param.success(res);
        }
    });
    
    // switch (cameraId_int){
    //  case 0:
    //      // uniapp横屏扫码摄像头成像会旋转90
    //      uni.scanCode({
    //          success: function (res) {
    //              console.log('条码类型:' + res.scanType);
    //              console.log('条码内容:' + res.result);
    //              // uni.showModal({
    //              //  title: '条码类型:' + res.scanType + "",
    //              //  content: '条码内容:' + res.result + ""
    //              // });
    //              if(res.result && res.result != "" && res.result != "用户取消" ){
    //                  typeof param.success == "function" && param.success(res);
    //              }
    //          }
    //      });
    //      break;
    //  default:
    //      var options = {
    //          scanType:['QR','EAN13','EAN8','PDF_417'],//扫码类型
    //          prompt:'将二维码/条形码放入框内,即可自动扫描',//扫码提示语
    //          // locked:true,//方向是否锁定、旋转(默认true)
    //          // beepEnabled:true,//扫码完成是否有提示音(默认true)
    //          // imageEnabled:false,//扫码成功时是否保存二维码图片(默认false)
    //          // cameraId : 1, //使用指定的相机ID(摄像头前1后0,默认0)
    //          cameraId : cameraId_int,
    //      };
    //      myScanCode.scanCode(options, res => {//res:{"result":"https://qr.alipay.com/cpx05564fwylkybgq7dxjb9","scanType":"QR_CODE","success":"true"}
    //          console.log("gotoScanCode-扫码res:" + JSON.stringify(res));
    //          // uni.showModal({
    //          //  title: '条码类型:' + res.scanType + "",
    //          //  content: '条码内容:' + res.result + ""
    //          // });
    //          if(res.result && res.result != "" && res.result != "用户取消" ){
    //              typeof param.success == "function" && param.success(res);
    //          }
    //      });
    //      break;
    // }
    
},

//cameraId
Vue.prototype.cameraKey = "camera_jk";
Vue.prototype.getCameraId = function(){
    var _self = this;
    // return uni.getStorageSync(_self.cameraKey) || 1;//类型为整型时的错误写法:恒为1
    return uni.getStorageSync(_self.cameraKey) || "1";//默认为1
    // return uni.getStorageSync(_self.cameraKey) === 0 ? 0 : 1;//类型为整型尚未测试(页面中类型也需进行修改)
    
},
Vue.prototype.setCameraId = function(cameraId){
    var _self = this;
    uni.setStorageSync(_self.cameraKey,cameraId);
},
  • index.vue中调用
//前置扫码
frontScan:function(){
    // #ifndef H5

    _self.gotoScanCode({
        success:function(res){
            console.log("扫码res:" + JSON.stringify(res));
            uni.showModal({
                title: '条码类型:' + res.scanType + "",
                content: '条码内容:' + res.result + ""
            }); 
        }
    });
            
    // #endif   
},

备注uni-app摄像头扫码问题

说明:目前已发布为uniapp插件,有需要请移步原生扫码插件

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,392评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,258评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,417评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,992评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,930评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,199评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,652评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,327评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,463评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,382评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,432评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,118评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,704评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,787评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,999评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,476评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,057评论 2 341

推荐阅读更多精彩内容

  • 基于Vue的一些资料 内容 UI组件 开发框架 实用库 服务端 辅助工具 应用实例 Demo示例 element★...
    尝了又尝阅读 1,139评论 0 1
  • 33、JS中的本地存储 把一些信息存储在当前浏览器指定域下的某一个地方(存储到物理硬盘中)1、不能跨浏览器传输:在...
    萌妹撒阅读 2,061评论 0 2
  • 一、 组件component 1. 什么是组件? 组件(Component)是 Vue.js 最强大的功能之一。组...
    饥人谷_Leonardo阅读 1,934评论 0 18
  • 记得2004年的时候,互联网开发就是做网页,那时也没有前端和后端的区分,有时一个网站就是一些纯静态的html,通过...
    阳阳阳一堆阳阅读 3,262评论 0 5
  • ## 框架和库的区别?> 框架(framework):一套完整的软件设计架构和**解决方案**。> > 库(lib...
    Rui_bdad阅读 2,885评论 1 4