摘要:近日,重构项目某一老模块时,有一个功能是生成二维码并下载,还可以复制链接。先想着新模块中是否有生成二维码的插件,看了下。项目中封装了一个指令。一份用来显示的。顺带说一下,复制粘贴复制粘贴老模块中是用的仓库。
近日,重构项目某一老模块时,有一个功能是生成二维码并下载,还可以复制链接。列表每项都有二维码、下载二维码和复制链接和列表上方总的二维码。
老模块是用的qrocode中文文档,qrcode github。
先想着新模块中是否有生成二维码的插件,看了下package.json。
有安装一个vue-qriously。但搜索了一下,竟然没有使用,可能是因为很多二维码都是后端生成返回链接给前端的。而在其他H5、微信项目中使用了。看了下这个项目star数是113。但我不想重新引入老模块的qrcodejs,重新引入其他的二维码插件,相对比较麻烦。于是就保持统一用vue-qriously了。
猜想当时引入这个是vue 资源合集awesome-vue中,qrcode相关第一个就是vue-qriously。
// 入口js文件 // npm install vue-qriously -S import Vue from "vue"; import VueQriously from "vue-qriously"; Vue.use(VueQriously);
// vue 文件
更多参数配置可以查看:github 仓库 v-qriously.vue源码
查看代码可以发现,开头引用了qrious,这个star就多一点,600多。
import Qrious from "qrious"
qrious github 地址
qrious 文档
粗略的翻看下以上相关文档,写完正准备要做下载功能。这时发现,哎呀,竟然就是只生成了一个canvas。
于是百度(暴露了用百度...我也想用谷歌,但现在不行...)了下canvas如何转图片。
stackoverflow Capture HTML Canvas as gif/jpg/png/pdf?
var canvas = document.getElementById("mycanvas"); var imgSrc = canvas.toDataURL("image/png"); document.write(""); // 搜索到一些其他的方案,感觉挺麻烦。 // 嗯,这个简单。想着我们项目兼容性没什么要求,于是就用这个了。
生成了img的src资源,那么就可以下载了。
// 老模块是用的`jquery` + `seajs` + `vue1.x` // 新模块尽量要去除`jquery`。 let src = $(".img").src; let aLink = $("").attr("href", src).attr("download", "xxx二维码.png").appendTo("body"); aLink[0].click(); aLink.remove();
// 新模块 去除jquery let elem = document.createElement("a"); elem.setAttribute("href", imgSrc); elem.setAttribute("download", "xxx二维码.png"); document.body.appendChild(elem); elem.click(); document.body.removeChild(elem);
但这样写也相对比较麻烦。
项目中封装了一个v-click指令。
/** * vClick 触发点击 * @type {Object} */ export const vClick = { directives: { click: { /** * 值更新时候触发点击 * @author 轩辕Rowboat* @date 2018-05-15 * @param {HTMLElement} el 指令所绑定的元素 * @param {Boolean} options.value 绑定值(新) * @param {Boolean} options.oldValue 绑定值(旧) */ update(el, { value, oldValue }){ if(value && !oldValue){ el.click(); } }, }, }, };
这就实现了下载的资源是160 * 160,用样式控制图片显示80 * 80。
代码写完,觉得应该给vue-qriously写个pr,实现 不仅仅是渲染canvas,而是让大家可以选择时img还是canvas。又去翻了翻这个项目的issue,有一个issue链接:how to make this canvas exchange to img 就是说的这个。还没关闭。i think u can create type let user select img and canvas.// 有一个回复 If you want to make it become downloadable, maybe you can transform it from canvas easily by canvas.toDataURL()文章写到这里,我发现这样似乎不太妥。我的场景,是点击时显示浮层(浮层有二维码和复制链接地址和下载二维码按钮等),获取canvas元素,去转成img src,再去渲染到页面,而且图片可能会闪,因为是实际大小是160,样式强制控制在80。
cliploard 复制粘贴
何不生成两份,一份是用来获取资源下载的。一份用来显示的。嗯,之后去优化下。
顺带说一下,复制粘贴老模块中是用的cliploardclipboard github仓库。就是我引入的。
新模块还没使用过,但依然使用这个。
// 安装 // npm install clipboard --save // 封装成一个函数 import Clipboard from "clipboard"; export default function Clip(event,text) { const clipboard = new Clipboard(event.target, { text: () => text }); clipboard.on("success", () => { console.log("复制成功"); clipboard.off("error"); clipboard.off("success"); clipboard.destroy(); }); clipboard.on("error", () => { console.log("复制失败,请刷新试试"); clipboard.off("error") clipboard.off("success") clipboard.destroy() }); clipboard.onClick(event); }当然也可以封装成vue指令。
小结
可以参考vue-element-admin这个项目
之前我看的时候还是3000多star,现在1.2w+,说明值得学习。
另外推荐awesomes网站 工具类库合集1、引入第三方插件等使用时,多查看github 文档 issue等,在技术社区搜索别人使用的方案。
关于
2、选用第三方插件时,尽可能挑选star比较多的,issue处理比较及时的,在更新维护的。
3、富余时间可以多研究下别人的项目是如何组织文件,和实现的一些常用功能的。
4、尽可能去优化自己的代码,总结回顾。作者:常以
轩辕Rowboat若川为名混迹于江湖。前端路上 | PPT爱好者 | 所知甚少,唯善学。
个人博客
segmentfault前端视野专栏,开通了前端视野专栏,欢迎关注
掘金专栏,欢迎关注
知乎前端视野专栏,开通了前端视野专栏,欢迎关注
github,欢迎follow~文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/95010.html
摘要:在谷歌找多页面,实例还是比较少,功夫不负有心人,在那找到了,具体可以到这个,非常感谢童鞋,今天要讲的内容是基于童鞋的多页面实例上再优化的。有需要一起交流的可以加我的微信,,记得备注技术交流哈。 vue+webpack是否有多页面 目前使用vue来做项目,估计大部分都是单页面(SPA)应用,一个轻型的 MVVM 框架,谁用了MVVM框架,就再也回不去JQ时代了,哈哈。 在手机端的项目,使...
摘要:本文使用署名国际许可协议,欢迎转载或重新修改使用,但需要注明来源。署名国际本文作者苏洋创建时间年月日统计字数字阅读时间分钟阅读本文链接使用和快速实现一个在线的解码服务本文将会介绍如何使用完成一个简单的二维码解析服务,全部代码在行以内。 本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0) ...
摘要:前阵子微信小程序的推出快速占据了桌面,手机厂商们坐不住了,为了抢回移动端应用分发入口,前几天中国通信院等协会联合小米华为等一众手机厂商共同发布了快应用。总的来说,这个文件就是微信小程序清单文件的混合体,用来描述应用和做一些基本配置。 前阵子微信小程序的推出快速占据了Android桌面,手机厂商们坐不住了,为了抢回移动端应用分发入口,前几天中国通信院等协会联合小米、华为、OPPO等一众手...
阅读 1215·2023-04-25 20:56
阅读 2255·2023-04-25 14:42
阅读 1019·2023-04-25 14:06
阅读 2858·2021-10-14 09:42
阅读 2134·2021-09-22 16:03
阅读 978·2021-09-13 10:30
阅读 1342·2019-08-29 15:41
阅读 1789·2019-08-29 12:55