html2canvas与vue-qr的爱与恨

手上有个重构项目,原来的邀请二维码页面做的比较赶,现在重构以后,需要美化一下二维码的页面。当然除了美化二维码以外,还需要用户可以保存,所以这就不仅仅是生成二维码,而是整个二维码卡片。

本来这部分是可以交给后端生存的,但是考虑到后端进行的美化未必方便,本质上写法与canvas一样,所以并没有交由后端处理。

在思考了一个白天后,我觉得用常规的网页写法写出卡片样式,使用html2canvas转化为base64。

因为样式的写法对我来说并不困难。所以很快就完成了如下的成品。当然这里用的二维码生成是用了vue-qr。主要是他支持很多自定义内容。

html2canvas与vue-qr的爱与恨  前端 web vue 第1张

引入依赖,得赖于vue-qr的生成回调功能,我可以在二维码生成以后去调用html2canvas,问题来了载入图片错误。

html2canvas与vue-qr的爱与恨  前端 web vue 第2张


html2canvas与vue-qr的爱与恨  前端 web vue 第3张

一开始我并没有意识到问题的所在,以为单纯是因为这个插件不能使用base64,虽然持有怀疑的态度,但是依旧使用跨域等思路去解决这个问题。当然如果解决了我也不会写这篇了。

直到第二天早上,一个很神奇的想法出现了,如果,如果我给他做一个延迟,那么会出现什么情况。

所以,二维码真的出现了。

事后诸葛了一下,其实原理很简单。vue-qr的回调仅仅是计算出二维码的base64后回调的方法,这时候未必会赋予img的src属性,所以会显示载入图片错误。正常我们仅仅需要在用户点击的时候去生存base64即可,所以大多数依旧可以避免这样问题出现。

修改后代码如下。


private qrSuccess(url: string) {
    this.$nextTick(() => {
        const html2canvas = require("html2canvas");
        html2canvas(this.$refs.shareCard, {allowTaint: true, useCORS: true}).then(function(canvas: any) {
            console.log(canvas.toDataURL("image/png"));
        });
    });
}


原文链接:,转发请注明来源!
「html2canvas与vue-qr的爱与恨」评论列表
访客
访客
发布于 2022-02-22 14:32:37  回复
有这一个的demo吗
捐卵联系方式捐卵联系方式捐卵联系方式捐卵联系方式捐卵联系方式捐卵联系方式捐卵联系方式捐卵联系方式
捐卵联系方式捐卵联系方式捐卵联系方式捐卵联系方式捐卵联系方式捐卵联系方式捐卵联系方式捐卵联系方式
发布于 2024-07-17 13:47:48  回复
识别码:ieytlf26539AF-你是老师的知音希望我们共同切磋共同进步!http://www.jnatjx.cn/
法务时刻
法务时刻
发布于 2024-07-20 21:12:45  回复
识别码:gmepbv12640HJ-哇啊啊啊,不错啊https://www.jiwenlaw.com
法务时刻法务时刻
法务时刻法务时刻
发布于 2024-07-23 20:15:27  回复
识别码:pxrqzk16987QF-哇啊啊啊,不错啊https://www.jiwenlaw.com
法务时刻
法务时刻
发布于 2024-07-24 22:31:49  回复
识别码:vjhsdq38695DJ-哇啊啊啊,不错啊https://www.jiwenlaw.com
法务时刻法务时刻
法务时刻法务时刻
发布于 2024-07-24 22:32:25  回复
识别码:bgcrxu81649CN-写的实在太好了https://www.jiwenlaw.com
法务时刻法务时刻
法务时刻法务时刻
发布于 2024-07-24 23:14:35  回复
识别码:fiyped24680RC-写的实在太好了https://www.jiwenlaw.com
法务时刻法务时刻法务时刻
法务时刻法务时刻法务时刻
发布于 2024-07-24 23:15:15  回复
识别码:wzlryn15340QI-哇啊啊啊,不错啊https://www.jiwenlaw.com
法务时刻法务时刻法务时刻法务时刻
法务时刻法务时刻法务时刻法务时刻
发布于 2024-07-24 23:15:54  回复
识别码:lxzygv62583GF-哇啊啊啊,不错啊https://www.jiwenlaw.com

发表评论