Vue + Qrcode 實現動態生成二維碼圖片,長按能保存


h5前台經常會有掃碼邀請他人的活動,掌握 動態生成二維碼圖片 就很重要了

將動態鏈接生成二維碼,最開始使用的是: @xkeshi/vue-qrcode 這個插件,很方便使用:

使用方式:

1.下載包

npm install @xkeshi/vue-qrcode --save

 

2.在需要的頁面中使用

<template id="demo">
  <div class="mask" v-show="ecodePop">
      <div class="ecodePop">
        <div class="main" >         
       <VueQrcode :value="qrcodeUrl" :options="{ size: 113 }"></VueQrcode>
          <p class="ecode_tips">出示二維碼讓用戶掃碼</p>
          <p>長按保存二維碼</p>
        </div>
        <img
          src="./close.png"
          alt
          class="close"
          @click.self.prevent="ecodePopCloce"
        />
      </div>
    </div>
</template>
<script>
import VueQrcode from '@xkeshi/vue-qrcode'
export default {
  data () {
    return {
      qrcodeUrl: 'www.baidu.com'
    }
  },
  components: { qrcode: VueQrcode },
}
</script>

 

3.效果如下圖:

 

   會發現,二維碼是用 canvas 畫出來的,非 img 標簽,不能使用長按保存圖片

   故舍棄該方法,尋找其他解決方式

 

  尋尋覓覓,方得一寶物: qrcode

  沒錯就是用 qrcode + canvas 結合使用即可達到 王炸效果,如下圖:

 

 

怎么搞得嘞,且聽我娓娓道來:

1.先下載包撒

npm install qrcode --save

 

2.頁面中使用嘍

 1 <template id="demo">
 2  <div class="mask" v-show="ecodePop">
 3       <div class="ecodePop">
 4           <div class="main" >         
 5              <div id="code"></div>
 6               <p class="ecode_tips">出示二維碼讓用戶掃碼</p>
 7               <p>長按保存二維碼</p>
 8           </div>
 9           <img
10             src="./close.png"
11             alt
12             class="close"
13             @click.self.prevent="ecodePopCloce"
14           />
15       </div>
16      <canvas id="canvas" ref ="canva"></canvas>
17     </div>
18 </template>
19 <script>
20 import QRCode from 'qrcode'
21 export default {
22   components: {
23     QRCode 
24   },
25   methods:{
26    // 獲取分享鏈接
27   getShareUrl(){
28     let canvas: any  = this.$refs.canva;
29     var code : any = document.getElementById("code");   //獲取到code容器
30     if(code.childNodes.length){ // 判斷元素是否有子元素
31       console.log(code.childNodes);
32       this.ecodePop = true
33       return false
34     }else{
35       this.ecodePop = false
36       const ShareData = {
37         otherShareType: 3
38       }
39       this.$Http.api("Share/GainShareInfo",ShareData,"post").then((data:any)=>{
40         if( data.result ){
41           QRCode.toCanvas(canvas, data.result.link, function (error:any) {
42             if (error) console.error(error)
43             console.log('success!');
44           })
45           var image = new Image();     //實例一個img
46           image.src = canvas.toDataURL("image/png");  //轉換成base64格式路徑的png圖片 
47           image.style.width = "100%";    //設置樣式
48           code.appendChild(image);     //添加到code 容器中
49           canvas.style.display = "none";   //隱藏掉canvas 
50           this.ecodePop = true
51         }
52       })
53     }
54   }
55 
56  }  
57 }
58 </script>                    

 

我是在點擊彈窗事件中,去調用接口,獲取動態鏈接,存在一個bug: 每點一次就多一個二維碼圖片,因為  使用 appendChild 往盒子里添加img圖片

code.appendChild(image);

 

解決方案就是:

  在調用接口前,判斷 code 元素是否有子元素,有的話,直接顯示彈窗即可,反之去調用接口

    var code : any = document.getElementById("code");   //獲取到code容器
    if(code.childNodes.length){ // 判斷元素是否有子元素
      console.log(code.childNodes);
      this.ecodePop = true
      return false
    }else{
      調用接口
   }

 

以上就是我實現動態鏈接生成二維碼圖片的詳細過程了

 

分享一刻:

如何在微信建立一個定時提醒機器人

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM