vue中使用qrcode.js,封装一个生成二维码的组件(支持下载和copy二维码里面的链接)

这是一个自己封装的组件

市面上还有其他组件:

vue-qr :这个可以给二维码中间加图片

本次封装组件的实例图如下: 

下载qrcodde

npm i qrcode -S

下载复制的插件

npm i vue-clipboard2 -S

QRcode.vue组件

<comment>
    # 组件注释
    这是一个公用组件
    v-clipboard:下载的一个插件
</comment>
<template>
  <div id="QRCode" :style="{'width':width, 'height':height}">
    <canvas :id="canvasId" :style="{'width':width, 'height':height}"></canvas>
    <div class="flex jc-center">
      <el-button
        type="text"
        v-if="copy"
        v-clipboard:copy="content"
        v-clipboard:success="onCopy"
        v-clipboard:error="onError"
      >复制链接</el-button>
      <el-button class="configBtn" type="text" size="" @click="download" v-if="download">下载二维码</el-button>
    </div>
  </div>
</template>
<script>
import QRCode from "qrcode";
import VueClipboard from "vue-clipboard2";
export default {
  name: "QRCode",
  props: {
    canvasId: {
      type: String,
      default: "canvasId"
    },
    content: {// 二维码中存储的信息
      type: String,
      default: "测试二维码"
    },
    width: {
      type: String,
      default: "200"
    },
    height: {
      type: String,
      default: "200"
    },
    download: {
      type: Boolean,
      default: false
    },
    copy: {
      type: Boolean,
      default: false
    },
    downloadParam: { // 下载的参数
      type: Object,
      default() {
        return {
          width: 200,
          height: 200,
          name: "二维码" // 下载之后的文件名
        };
      }
    },
    view: {
      type: Boolean,
      default: true
    }
  },
  data() {
    return {};
  },
  computed: {},
  created() {
    this.$nextTick(() => {
      this.init();
    });
  },
  mounted() {},
  methods: {
    init() {
      let width = this.width,
        height = this.height;
      QRCode.toCanvas(
        document.getElementById(this.canvasId),
        this.content,
        { width, height, toSJISFunc: QRCode.toSJIS },
        error => {}
      );
    },
    onCopy: function(e) {
      this.$message({
        message: `复制成功!`,
        type: "success"
      });
    },
    onError: function(e) {
      alert("复制失败");
    },
    // 下载二维码
    download() {
      const ele = document.createElement("canvas");
      ele.style.width = this.downloadParam.width || "200" + "px";
      ele.style.height = this.downloadParam.height || "200" + "px";
      QRCode.toCanvas(
        ele,
        this.content,
        {
          width: this.downloadParam.width || "200",
          height: this.downloadParam.height || "200",
          toSJISFunc: QRCode.toSJIS
        },
        error => {}
      );
      let [F, S, a] = [
        navigator.userAgent.indexOf("Firefox") > -1,
        ele.toDataURL("image/png"),
        document.createElement("a")
      ];
      [a.href, a.download] = [S, this.downloadParam.name];
      if (F) {
        let evt = document.createEvent("MouseEvents");
        evt.initEvent("click", true, true);
        a.dispatchEvent(evt);
      } else {
        a.click();
      }
    }
  },
  watch: {
    content(val) {
      this.init();
    }
  }
};
</script>
<style lang="scss" scoped>
#QRCode {
  display: inline-block;
  position: relative;
  overflow: hidden;
}

</style>

使用上面的组件生成二维码

<template>
  <div id="QRcode_gr">
      <QRcode
        width="200"
        height="200"
        :content="content"
        :load="true"
        :copy="false"
        :downloadParam="{width: 200,
          height: 200,
          name: '二维码'}"
      ></QRcode>
  
  </div>
</template>
<script>
import QRcode from "@/components/common/QRcode";
export default {
  name: '',
  components: {QRcode },
  props: {},
  data() {
    return {
    
      content: 'www.baidu.com',
      name: ''
    }
  },
  watch: {},
  computed: {},
  created() { },
  mounted() { },
  methods: {
   
    
    
  },
  destroyed() { }
}
</script>
<style lang='scss'>

</style>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用qrcode.vue生成二维码的步骤如下: 1. 引入qrcode.vue组件,该组件的体积相对较小,但不能添加心logo。 2. 在Vue模板使用vue-qr组件,设置id为"qrcode",并传入生成二维码所需的text和size参数。 3. 在Vue模板添加一个按钮,当点击按钮时触发saveImg函数。 4. 在Vue的script setup使用import语句引入qrcode.vue组件和其他所需的资源。 5. 根据需要,可以在logoSrc变量设置logo的路径。 6. 在saveImg函数,获取生成的二维码图片元素,创建一个下载链接,并设置链接的href和download属性。 7. 点击按钮后,调用a元素的click方法,实现下载二维码的功能。 你可以参考以下代码示例: ```html <template> <qrcode id="qrcode" :text="value" size="135"></qrcode> <br /> <el-button @click="saveImg">下载二维码</el-button> </template> <script setup> import qrcode from 'qrcode.vue' import code_logo from '../../assets/vue.svg' const props = defineProps({ value: { type: String, default: 'https://www.baidu.com/' } }) let logoSrc = code_logo function saveImg() { let picData = document.getElementById("qrcode") let a = document.createElement("a"); a.href = picData.src; a.download = "qrcode.png"; a.click(); } </script> ``` 请注意,以上代码只是一个示例,具体的实现方式可能会根据你的实际需求和项目配置而有所不同。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Vue3项目生成并下载二维码,关于vue-qr.vueqrcode.vue插件之间的区别](https://blog.csdn.net/qq_51758070/article/details/128232266)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值