1.前言

  • 该组件依赖qrcode.js与element-ui
  • 支持二维码大小配置,点击大图预览
  • 该组件以vue文件形式进行封装,需要配置httpVueLoader插件进行引入,其他格式请自行更改源码

2.使用方法

  • 引入依赖
<link href="https://cdn.bootcdn.net/ajax/libs/element-ui/2.15.13/theme-chalk/index.min.css" rel="stylesheet">
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.7.9/vue.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/element-ui/2.15.13/index.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/qrcodejs/1.0.0/qrcode.min.js"></script>
<script src="https://unpkg.com/http-vue-loader"></script>
  • 引入组件(这里使用httpVueLoader进行引入)
<script>
new Vue({
el:"#app",
data: {
qrcode: "你好"
},
components:{
'ep-qrcode': httpVueLoader('./ep-qrcode.vue'),//二维码组件
},
})
</script>
  • 进行渲染
<body>
<div id="app" v-cloak>
<ep-qrcode :text="qrcode"></ep-qrcode>
</div>
</body>

3.配置项列表

参数 默认值 必填 说明
text 请传入二维码的值 支持数字和字符串
size 20 二维码的大小
preview false 是否支持点击大图预览
preview_size 256 大图预览时二维码的大小

4.qrcode.js基本使用

  • 创建实例,传入Dom和其他参数进行初次渲染
this.instance = new QRCode(DOM, {
text: '二维码内容',
width: 200,
height: 200,
colorDark : "#000000",
colorLight : "#ffffff",
correctLevel : QRCode.CorrectLevel.H
})
  • 更新二维码
//清空原二维码
this.instance.clear()
//渲染新二维码
this.instance.makeCode(newVal)

5.大图预览的技巧

  • 通常情况下的大图预览,都是点击element-ui的el-image组件自动完成的,但是有些情形下图片没有通过el-image进行渲染,就无法按element-ui的方式进行预览
  • 可以渲染一个el-image,传入要预览的图片URL,再设为隐藏状态,当要预览目标图片时,更新el-image组件的src地址,并且调用特定方法,模拟点击事件
<!-- 图片预览 -->
<div style="display: none;">
<el-image
ref="preview_image"
style="width: 100px; height: 100px"
:src="preview_image"
:preview-src-list="[preview_image]">
</el-image>
</div>
//更新要预览的图片地址
this.preview_image = "要预览的图片地址"
//触发预览
this.$refs.preview_image.clickHandler()

6.源码及思路

  • 通过组件形式接收参数,调用qrcode.js进行二维码渲染
  • 大图预览:先调用qrcode.js进行大图渲染获取base64地址,再调用element-ui的图片组件进行预览
  • 源码
<template>
<div class="ep-qrcode-wrap">
<!-- 小图 -->
<div ref="qrcode" :class="{'can-preview': preview}" @click="onClick" class="qrcode-box">
</div> <!-- 预览图 -->
<div ref="qrcode_preview" style="display: none;">
</div> <!-- 图片预览 -->
<div style="display: none;">
<el-image
ref="preview_image"
style="width: 100px; height: 100px"
:src="preview_image"
:preview-src-list="[preview_image]">
</el-image>
</div>
</div>
</template> <script>
module.exports = {
data(){
return {
instance: null,//实例
instance2: null,//实例
preview_image: "",//预览图地址
}
},
mounted(){
//渲染二维码(默认图)
this.instance = new QRCode(this.$refs.qrcode, {
text: this.text + '',
width: this.size,
height: this.size,
colorDark : "#000000",
colorLight : "#ffffff",
correctLevel : QRCode.CorrectLevel.H
})
//渲染二维码(预览图)
if(this.preview){
this.instance2 = new QRCode(this.$refs.qrcode_preview, {
text: this.text + '',
width: this.preview_size,
height: this.preview_size,
colorDark : "#000000",
colorLight : "#ffffff",
correctLevel : QRCode.CorrectLevel.H
})
} },
watch:{
//监听watch
text(newVal,oldVal){
//清空原二维码
this.instance.clear()
//渲染新二维码
this.instance.makeCode(newVal)
//更新大图
if(this.preview){
//清空原二维码
this.instance2.clear()
//渲染新二维码
this.instance2.makeCode(newVal)
}
}
},
props:{
//二维码的值
text:{
type: [String,Number],
default: "请传入二维码的值"
},
//默认的二维码大小
size: {
type: Number,
default: 20
},
//是否支持点击大图预览
preview: {
type:Boolean,
default: false
},
//点击大图预览的二维码大小
preview_size: {
type: Number,
default: 256
},
},
methods:{
onClick(){
//未开启预览,直接返回
if(!this.preview) return //获取图片地址
this.preview_image = this.instance2._el.children[1].src
//触发预览
this.$refs.preview_image.clickHandler()
}
}
}
</script> <style scoped>
.ep-qrcode-wrap .qrcode-box > img{
display: inline-block !important;
}
.ep-qrcode-wrap .can-preview{
cursor: pointer;
}
</style>

Vue 二维码组件的更多相关文章

  1. Vue 二维码生成插件

    1. 安装 qrcode.vue 仓库地址 // vue2 安装1.x版本.vue3 安装3.x版本 npm install --save qrcode.vue // 或 yarn add qrcod ...

  2. .Net Core上也可以使用的二维码组件

    我Fork了QRCoder,并且兼容了.Net Core,图形库用的是ZKWeb.System.Drawing Github: https://github.com/zkweb-framework/Q ...

  3. vue2.0 自定义 生成二维码(QRCode)组件

    1.自定义 生成二维码组件 QRCode.vue <!-- 生成二维码 组件 --> <template> <canvas class="qrcode-canv ...

  4. 基于Metronic的Bootstrap开发框架经验总结(14)--条码和二维码的生成及打印处理

    在很多项目里面,对条形码和二维码的生成和打印也是一种很常见的操作,在Web项目里面,我们可以利用JS生成条形码和二维码的组件有很多.本文引入两个比较广泛使用的JS组件,用来处理条形码和二维码的生成处理 ...

  5. js动态生成二维码

    一.使用jquery.qrcode生成二维码 1.首先在页面中加入jquery库文件和qrcode插件 <script type="text/javascript" src= ...

  6. Atitit.二维码功能的设计实践 attilax 总结

    Atitit.二维码功能的设计实践 attilax 总结 1.1. 二维码要实现的功能1 1.2. 现有二维码功能设计不足的地方(待改进)1 1.3. 二维码组件1 1.4. Java版  zxing ...

  7. vue.js 二维码生成组件

    安装 通过NPM安装 npm install vue-qart --save 插件应用 将vue-qart引入你的应用 import VueQArt from 'vue-qart' new Vue({ ...

  8. 基于QRcode的带有文字+图片的二维码的Vue组件

    1 <template> 2 <!-- 生成二维码开放接口: 3 二维码内容[通常为url] 4 二维码大小[限制为正方形] 二维码下方显示:文字 5 二维码中间显示:图片--> ...

  9. vue 中生成二维码之爬坑之路

    最近在做vue中项目,有个需求是在你提交信息后把后台返给你的链接生成二维码. 一共使用了两种生成二维码的方法 1.vue-qr 这个是在一进入页面直接生成二维码,具体介绍见文档:https://www ...

  10. 在ts+vue中实现前端批量下载打包二维码

    ---恢复内容开始--- 一.插件安装 首先是插件的安装与引入,这里我们用的是qrcode的这个插件,直接使用npm install qrcodejs2安装即可,但是这里要注意,如果你用的是ts进行开 ...

随机推荐

  1. ASP.NET Core – Custom Input formatters For Partial Update and Handle Under-posting

    前言 之前的文章有谈过关于 ASP.NET Core 处理 under-posting 的方式. 它会使用 class default value. 许多时候这可能不是我们期望的. 比如当我们想要 p ...

  2. 系统编程-进程-当fork遇到管道,可能碰撞出什么?

    第一部分 1. 直接上代码 #include <stdio.h> #include <unistd.h> #include <stdlib.h> int globv ...

  3. [OI] 可持久化数据结构

    学了一年 OI 才看懂这句话: \(\log n\) 是以什么为底的? 其实没什么区别 因为我们自动忽略常数,因此 \(\log_{a}n=\frac{\log_{x}n}{\log_{x}a}=\l ...

  4. std::vector::reserve

    std::vector::reserve 函数在 C++ 中用于预分配内存,避免在元素增加时多次重新分配内存,从而提高性能. 它最常用于需要频繁向 vector 中添加元素,并且可以预估容器的最终大小 ...

  5. Android性能优化:getResources()与Binder交火导致的界面卡顿优化

    背景 某轮测试发现,我们的设备运行一个第三方的App时,卡顿感非常明显: 界面加载很慢,菊花转半天 滑屏极度不跟手,目测观感帧率低于15 对比机(竞品)也会稍微一点卡,但是好很多,基本不会有很大感觉的 ...

  6. 如何快速定位 Linux Panic 出错的代码行

    问题描述 内核调试中最常见的一个问题是:内核Panic后,如何快速定位到出错的代码行? 就是这样一个常见的问题,面试过的大部分同学都未能很好地回答,这里希望能够做很彻底地解答. 问题分析 内核Pani ...

  7. Windows10 安装使用 Docker

    Windows10 安装使用 Docker 下载安装 Docker Desktop https://docs.docker.com/docker-for-windows/install/ 点击运行 D ...

  8. 活动预告 | 中国数据库联盟(ACDU)中国行第二站定档杭州,邀您探讨数据库技术与实践!

    数据库技术一直是信息时代中不可或缺的核心组成部分,随着信息量的爆炸式增长和数据的多样化,其重要性愈发凸显.作为中国数据库联盟(ACDU)的品牌活动之一,[ACDU 中国行]在线下汇集数据库领域的行业知 ...

  9. 2021年6月国产数据库排行榜:OceanBase、PolarDB会师TiDB、openGauss,入局开源阵营,逐鹿生态建设

    "首夏犹清和,芳草亦未歇",时至六月,百花齐放.百家争鸣的国产数据库市场依旧延续着如骄阳般火热的态势.不过从最新一期的 国产数据库流行度排行榜 Top 10 中不难发现,一个词足以 ...

  10. 2022年6月中国数据库排行榜:TiDB卷土重来摘桂冠,达梦蛰伏五月夺探花

    排行榜风云又起,各产品墨坛论剑.2022年6月的 中国数据库流行度排行榜 再掀风云,6月排行榜共有231个数据库参与排名,两名新成员的加入,注入了新活力.本月排行榜用一句话可以概括为:TiDB卷土重来 ...