vue和小程序使用生成二維碼插件(個人筆記)

一狐榔、vue中使用qrcodejs

官方文檔:https://github.com/davidshimjs/qrcodejs

第一步 安裝

npm install --save qrcodejs2

第二步 項目中引入

import QRCode from "qrcodejs2";

第三步 使用

<div class="qrcodeimg">
     <div ref="qrcode"></div>
</div></pre>
  import QRCode from "qrcodejs2";
  export default {
     methods:{
        qrcode() {
             // 在屬性ref="qrcode"的div里邊添加二維碼
             this.$refs.qrcode.innerHTML = '' // 重新生成二維碼之前先清空获雕,否則可能生成多個二維碼
             const qrcode = new QRCode(this.$refs.qrcode, { 
                 width: 120,
                 height: 120, // 高度
                 colorLight: "#ffffff",
                 text: ''// 二維碼內(nèi)容(接口返回的數(shù)字或者什么收捣,如:需要掃碼跳轉(zhuǎn)的鏈接)
              });
         }
    },
    mounted() {
       this.qrcode()
    }
  };

報錯:

image.png

注:1.如出現(xiàn)以上報錯罢艾,把this.$refs獲取元素方法改為document.getElementById();
2.如出現(xiàn)appendChild的報錯,就把this.qrcode()方法寫在setTimeout里面咐蚯。

在列表里實現(xiàn)生成多個二維碼并實現(xiàn)下載

以上方法只能實現(xiàn)生成一個二維碼,要生成多個二維碼春锋,需要動態(tài)的id。

<el-table-column align="center" prop="opration" fixed="right" label="操作" width="230">
    <template scope="{row}">
        <el-popover placement="bottom-end" width="300" trigger="click" :id="'popover'+row.live_id">
             <div>
                 <div class="code tac">
                     <div class="qrcodeimg" style="padding: 30px 90px 20px">
                          <div :ref="'qrcode'+row.live_id"></div>
                     </div>
                     <div>
                           <el-button type="text" @click="download(row)">下載二維碼</el-button>
                      </div>
                 </div>
                 <div class="copy" style="margin-top:20px">
                      <el-input placeholder="請輸入內(nèi)容" style="width:70%" :id="'copyVal'+row.live_id" :value="row.push_flow"></el-input>
                      <el-button class="copyBtn" style="margin-left:10px" type="primary" :data-clipboard-target="'#copyVal'+row.live_id" :id="'copyBtn'+row.live_id" @click="handleCopyCode(row.live_id)">復制</el-button>
                 </div>
             </div>
            <el-button type="text" size="small" slot="reference" class="share" @click="handleShare(row)">分享</el-button>           
       </el-popover>
    </template>
</el-table-column>
// 生成二維碼函數(shù)
qrcode(row) {
    // 在屬性ref="qrcode"的div里邊添加二維碼
    this.$refs['qrcode' + row.live_id].innerHTML = '' // 生成新的二維碼之前先清空,否則會生成多個
    this.$nextTick(() => {
        this.Qrcode = new QRCode(this.$refs['qrcode' + row.live_id], {
           width: 120,
           height: 120, // 高度
           colorLight: "#ffffff",
           text: process.env.VUE_APP_URL + `?live_id=${row.live_id}&live_status=${row.live_status}` // 二維碼內(nèi)容(接口返回的數(shù)字或者什么,'http://www.baidu.com')
      });
 })
},
// 下載二維碼
download(row) {
     let myCanvas = this.$refs['qrcode' + row.live_id].getElementsByTagName('canvas');
     let a = document.createElement('a')
     a.href = myCanvas[0].toDataURL('image/png');
     a.download = '二維碼';
     a.click()
},

二施禾、小程序中使用weapp-qrcode/weapp-qrcode-base64

微信小程序快速生成二維碼: https://github.com/dillonlfy/weapp-qrcode

1. weapp-qrcode插件

// 首先把weapp-qrcode.js代碼封裝到utils文件夾里面
const QRCode = require('../../utils/weapp-qrcode.js')
const W = wx.getSystemInfoSync().windowWidth;
const rate = 750.0 / W;

// rpx轉(zhuǎn)成px單位搁胆,300rpx 在6s上為 150px
const qrcode_w = 300 / rate;

Page({
    data: {
        ...
        qrcode_w: qrcode_w,
        ...
    },
    onLoad: function (options) {
        qrcode = new QRCode('canvas', {
            // usingIn: this,
            text: "https://github.com/tomfriwel/weapp-qrcode",
            image: '/images/bg.jpg',
            padding: 12,
            width: qrcode_w,
            height: qrcode_w,
            colorDark: "#1CA4FC",
            colorLight: "white",
            correctLevel: QRCode.CorrectLevel.H,
            callback: (res) => {
                // 生成二維碼的臨時文件
                console.log(res.path)
            }
        });
    },
    ...
})

wxml頁面中:

<canvas class='canvas' style="width:{{qrcode_w}}px; height:{{qrcode_w}}px;" canvas-id='canvas' bindlongtap='save'></canvas>

usingIn為可選參數(shù),詳情清查卡在自定義組件使用時失效及解決思路 #1

text為需要轉(zhuǎn)化為二維碼的字符串攀例;

widthheight為繪制出的二維碼長寬顾腊,這里設置為跟canvas同樣的長寬;

colorDarkcolorLight為二維碼交替的兩種顏色杂靶;

correctLevel糾錯等級, H等級最高(30%) 簡單來說,就是二維碼被覆蓋了多少仍然能被識別出來吗垮;

如果需要再次生成二維碼,調(diào)用qrcode.makeCode('text you want convert')怯屉。

2.weapp-qrcode-base64插件

地址:https://github.com/Pudon/weapp-qrcode-base64

基于base64編碼輸出二維碼,不依賴canvas锨络。
wxml中
只需要在 wxml 文件中增加個image標簽動態(tài)引用base64編碼即可。

<image src="{{qrcodeURL}"> </image>

js中

const QR = require('./weapp-qrcode.js')
const rpx2px = wx.getSystemInfoSync().windowWidth / 750
Component({
// 此例子是封裝成組件寿谴,寫在properties里面是接收來自父組件的傳值
    properties: {
        value: String, //二維碼內(nèi)容
        width: String, //二維碼寬度(默認長寬相等)
    },
    data: {
        qrcodeURL: ''
    },
    ready: function() {
        // 此方法返回輸出base64編碼
        var imgData = QR.drawImg(this.data.value, {
          typeNumber: 3,//碼點大小 1-40失受,數(shù)字越大,碼點越小拂到,二維碼會顯得越密集
          //糾錯等級 H等級最高(30%) 簡單來說,就是二維碼被覆蓋了多少仍然能被識別出來
          errorCorrectLevel: 'H',
          size: parseInt(rpx2px * this.data.width)
        })
        // 返回輸出base64編碼imgData賦值到image標簽的src中
        this.setData({
          qrcodeURL: imgData
        })
      }
})

3.weapp-qrcode-canvas-2d插件

https://developers.weixin.qq.com/community/develop/article/doc/000e88e73a415835ed9b46d7956013

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末狼犯,一起剝皮案震驚了整個濱河市领铐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绪撵,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件幻碱,死亡現(xiàn)場離奇詭異细溅,居然都是意外死亡,警方通過查閱死者的電腦和手機喇聊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門承疲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來邻耕,“玉大人燕鸽,你說我怎么就攤上這事啼辣。” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵削解,是天一觀的道長沟娱。 經(jīng)常有香客問我,道長济似,這世上最難降的妖魔是什么砰蠢? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮律杠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己茂嗓,他們只是感情好,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蔓罚,像睡著了一般瞻颂。 火紅的嫁衣襯著肌膚如雪豺谈。 梳的紋絲不亂的頭發(fā)上贡这,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天盖矫,我揣著相機與錄音丽惭,去河邊找鬼辈双。 笑死,一個胖子當著我的面吹牛湃望,可吹牛的內(nèi)容都是我干的痰驱。 我是一名探鬼主播瞳浦,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蝇完!你這毒婦竟也來了矗蕊?” 一聲冷哼從身側(cè)響起短蜕,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤忿危,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后铺厨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體硬纤,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年洼裤,在試婚紗的時候發(fā)現(xiàn)自己被綠了溪王。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡莹菱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出道伟,到底是詐尸還是另有隱情,我是刑警寧澤祝懂,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布拘鞋,位于F島的核電站,受9級特大地震影響盆色,放射性物質(zhì)發(fā)生泄漏颅和。R本人自食惡果不足惜缕允,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一蹭越、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧响鹃,春花似錦、人聲如沸买置。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至寞酿,卻和暖如春脱柱,著一層夾襖步出監(jiān)牢的瞬間伐弹,已是汗流浹背榨为。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留日川,地道東北人板壮。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像绰精,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子笨使,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348