前言
之前我很早就做过支付的内容了,但仔细玩这个二维码的配置项还是今天刚开始玩,今天记录一下这个二维码生成器如何来自定义,我这里就举几个例子,后续的操作就交给大家开发了。
前置准备
我们需要一个二维码的文字text,这个很简单,你随便找个二维码,然后去进行解码
这里给大家一个网址:https://cli.im/deqr
解码成功之后就得到了这个文本
或者你直接就用某个text,让人家扫出来是这段文字,这样也是可以的。
生成最简单的二维码
qrcode
环境与组件选择
这里我使用的库是qrcodejs2
,这个在vue2的环境是可以使用的,在vue3的环境中,需要使用qrcodejs2-fix
,这俩个的配置项是一样的,我就用vue3+qrcodejs2-fix来给大家大概展示下如何使用,react中我还没试过奥,大家可以自己试一下。
组件安装
1 | npm i qrcodejs2-fix |
基本二维码
我们用tdesign的弹窗组件来作为载体,然后写一个id为qrcode
的div的dom来装载二维码,注意一下细节,在vue3中,我们必须使用nextTick保证qrcode存在,如果是vue2中二维码是在弹窗中的,最好也加上this.$nextTick。
1 | <template> |
加个颜色
这里我加了颜色,将我的二维码变成了绿色
1 | var qrcode = new QRCode("qrcode", { |
没错,这个组件就结束了,那作为一个前端开发工程师,这个效果指定是不能满足咱们的需求的啊,花里胡哨才是咱们追求的,这时候我们完全可以自己写一个二维码封装的库,这里我就基于vue3写一个好了
根据qrcode完善功能
实现思路
我不知道大家看到这里有没有自己的思路了奥,其实最简单的就是我们调用一个生成二维码的组件,然后这个生成的二维码格式最好是图片的格式,之后我们将这个图片插入到canvas中,接下来的操作就简单了,我得思路也就是这样的。
修改dom
我就将他原来的dom作为一个虚假载体,直接display:none
干掉,然后自己写一个canvas
作为真实的载体显示。
1 | <template> |
添加图片和ref
我找了一张图片,然后定义了一个ref
1 | const bgUrl=`https://rocket-chat.oss-cn-hangzhou.aliyuncs.com/202303/999999/imagesb7ab2054257e49c495e2540cd6434705.png` |
获取生成的二维码图片
1 | const qrcode = new QRCode("qrcode", { |
等待图片加载完毕
1 | const bgcImage=new Image() |
接下来的代码都是在onload里面的
设置canvas的宽高
这里我们就按照qrcode生成的图片的宽高来设置
1 | qrcodeRef.value.width=200; |
获取上下文对象并清理画布
1 | const ctx=qrcodeRef.value.getContext('2d') |
先画二维码
1 | ctx.drawImage(elImg,0,0,200,200) |
绘制背景图
需要添加透明度,这里我用了白色的0.5的透明度
1 | ctx.fillStyle = "#fff"; |
添加背景图
1 | // 再画背景图 |
中心logo
我们先将透明度改回来,这里我按照除以5来计算了
1 | ctx.globalAlpha = 1; |
这样一顿简单修改之后,就得到了我们的自定义二维码
完整代码
1 | <template> |
简单封装一下
组件
1 | <template> |
调用
1 | <template> |
vue3中封装qrcode2-fix就是这样,如果是vue2中封装qrcode2,原理是一样的
结语
本篇文章就到这里了,更多内容敬请期待~