近日,重构项目某一老模块时,有一个功能是生成二维码并下载,还可以复制链接。列表每项都有二维码、下载二维码和复制链接和列表上方总的二维码。 老模块是用的qrocode中文文档,qrcode github。

先想着新模块中是否有生成二维码的插件,看了下package.json。 有安装一个vue-qriously。但搜索了一下,竟然没有使用,可能是因为很多二维码都是后端生成返回链接给前端的。而在其他H5、微信项目中使用了。看了下这个项目star数是113。但我不想重新引入老模块的qrcodejs,重新引入其他的二维码插件,相对比较麻烦。于是就保持统一用vue-qriously了。 猜想当时引入这个是vue 资源合集awesome-vue中,qrcode相关第一个就是vue-qriously

vue-qriously插件使用

// 入口js文件
// npm install vue-qriously -S
import Vue from 'vue';
import VueQriously from 'vue-qriously';
Vue.use(VueQriously);
复制代码
// vue 文件
<template><qriously :value="value" size="size" :backgroundAlpha="backgroundAlpha"/>
</template><script>
export default {name: 'app',data(){return {// 可以自定义,必填项。value: 'http://lxchuan12.github.io/',// 二维码大小 默认 100size: 80,// 背景透明度,默认透明 0 backgroundAlpha: 1,}}
}
</script>
复制代码

更多参数配置可以查看: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="'+img+'"/>');
// 搜索到一些其他的方案,感觉挺麻烦。
// 嗯,这个简单。想着我们项目兼容性没什么要求,于是就用这个了。
复制代码

生成了imgsrc资源,那么就可以下载了。

// 老模块是用的`jquery` + `seajs` + `vue1.x`
// 新模块尽量要去除`jquery`。
let src = $('.img').src;
let aLink = $('<a></a>').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 <lxchuan12@163.com>* @date   2018-05-15* @param  {HTMLElement} el                指令所绑定的元素* @param  {Boolean}     options.value     绑定值(新)* @param  {Boolean}     options.oldValue  绑定值(旧)*/update(el, { value, oldValue }){if(value && !oldValue){el.click();}},},},
};
复制代码
<template>
<div><div class="img" v-show="listShareShow"><qriously id="qriously" :backgroundAlpha="1" :value="listSharingLink" :size="160" v-show="false"/><img :src="listSharingLinkSrc" alt="xxx二维码"></div><a :href="exportLink" v-click="download" :download="downloadFilename"></a><a  @click.stop="listShare">查看链接/二维码</a>
</div>
</template>
<script>
export default {// 提取出主要代码data(){retrun {// 下载download: false,downloadFilename: 'xxx二维码',listSharingLinkSrc: '',listSharingLinkSrc: '',listShareShow: false,}},// ...methods: {/*** 查看链接/二维码* @author 轩辕Rowboat <lxchuan12@163.com>* @date   2018-05-15*/listShare(event){if(!this.listSharingLinkSrc){let canvas = document.querySelector('#qriously canvas');let imgSrc = canvas.toDataURL('image/png');this.listSharingLinkSrc = imgSrc;}this.listShareShow = !this.listShareShow;},/*** 表格上方:下载二维码列表* @author 轩辕Rowboat <lxchuan12@163.com>* @date   2018-05-15*/downloadQrcode(event, linkSrc, downloadFilename){event.stopPropagation();this.exportLink = linkSrc;this.downloadFilename = downloadFilename;this.download = true;this.$nextTick(() => {this.exportLink = '';this.download = false;this.downloadFilename = '';});},},
};
</script>
复制代码

代码写到这里,嗯,实现完了下载。但又发现又一需求,显示大小是80 * 80,下载需要是160 * 160

显示大小和下载大小不一样。

参考了下老模块,qrcodejs渲染出来的html,

//  跟这个类似
<div id="qrcode_1" title="your content"><canvas width="256" height="256" style="display: none;"></canvas><img alt="Scan me!" style="display: block;" src="data:image/png;base64,xxx">
</div>
复制代码

vue-qriously渲染出来是

<div><canvas width="80" width="80"></canvas>
</div>
复制代码

于是我可以把生成的imgSrc资源,

<template>
<div><canvas width="160" width="160" v-show="false"></canvas><img class="img" :src="imgSrc"/>
</div>
</template>
<style lang="less">
.img{width: 80px;height: 80px;
}
</style>
复制代码

这就实现了下载的资源是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
<template @click="Clip($event, '快来复制')"><template>
// 封装成一个函数
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这个项目 之前我看的时候还是3000star,现在1.2w+,说明值得学习。 另外推荐awesomes网站 工具类库合集

小结

1、引入第三方插件等使用时,多查看github 文档 issue等,在技术社区搜索别人使用的方案。

2、选用第三方插件时,尽可能挑选star比较多的,issue处理比较及时的,在更新维护的。

3、富余时间可以多研究下别人的项目是如何组织文件,和实现的一些常用功能的。

4、尽可能去优化自己的代码,总结回顾。

文章首发于SegmentFault vue 2.x项目 vue-qriously生成二维码并下载、cliploard复制粘贴

关于

作者:常以轩辕Rowboat若川为名混迹于江湖。前端路上 | PPT爱好者 | 所知甚少,唯善学。
个人博客
segmentfault前端视野专栏,开通了前端视野专栏,欢迎关注
掘金专栏,欢迎关注
知乎前端视野专栏,开通了前端视野专栏,欢迎关注
github,欢迎follow~

vue 2.x项目 vue-qriously 生成二维码并下载、cliploard复制粘贴相关推荐

  1. vue 项目中 自动生成 二维码

    vue 项目中 自动生成 二维码 ​ 最近在写一个vue项目,要求根据卡号可以自动生成一个二维码,并渲染在指定位置,因为第一次做类似业务,小编在网上找了找,发现了很多,具体起来主要用的就两种: QRc ...

  2. vue项目中自动生成二维码

    vue项目中自动生成二维码 我们在做vue项目时,很多时候要用到生成二维码的功能,今天给大家介绍一个有前端生成二维码的小例子: 1.安装vue-qr: npm isntall vue-qr --sav ...

  3. vue项目使用qrcodejs2生成二维码

    1.安装 cnpm i qrcodejs2 -S 2.使用 template文件 <!-- 二维码弹框 --> <el-button type="primary" ...

  4. vue js前端根据所需参数生成二维码并下载

    需要一个插件 qrcodejs2, 使用 npm install qrcodejs2 --save 下载该依赖包. 在vue中引入(我这边是vue2).import QRCode from 'qrco ...

  5. vue 生成二维码并下载

    vue 项目中需要实现生成二维码,并且下载下来. 引入 qrcode : import QRCode from "qrcodejs2" 生成二维码: createQRCode () ...

  6. vue+qrcodejs2 动态生成二维码并下载

    安装依赖 npm install --save qrcodejs2 vue页面引用 <script>import QRCode from 'qrcodejs2'import axios f ...

  7. vue生成二维码并下载

    vue生成二维码图片,这里使用的是qrcode.js 这个插件 1.下载插件 npm install --save qrcodejs2 2.组件内使用 <template>   <B ...

  8. Vue使用QrcodeVue生成二维码并下载

    生成二维码 1.安装qrcode.vue组件 npm install --save qrcode.vue 2.实现 <template><div id="app" ...

  9. vue生成二维码并下载二维码

    首先安装一下面这个插件 cnpm install vue-qr -S 接下来在需要生产并下载二维码的页面引入 import VueQr from 'vue-qr' 并在components中注册为组件 ...

最新文章

  1. 关于微软Silverlight,你应该知道的10件事
  2. Google首页电吉
  3. Livemesh文件同步功能--使用图解
  4. 如果只看一篇文章弄懂Pfile与spfile,那么这篇就够了……
  5. 44.Android之Shape设置虚线、圆角和渐变学习
  6. 程序员的思维修炼》读书笔记
  7. LeetCode 957. N 天后的牢房(查找循环节)
  8. bzoj 1597 [Usaco2008 Mar]土地购买——斜率优化dp
  9. eBPF BCC 实现UNIX socket抓包
  10. NVIDIA显卡驱动安装方法
  11. SPSS学习(五)独立样本t检验
  12. 详解24个经典股票技术指标(一)
  13. 容斥原理 原理及模板代码
  14. 中南大学计算机学院2021复试名单,2021年中南大学研究生拟录取名单整理汇总(各学院)...
  15. web3.0学习入门1:什么是web3.0
  16. jQuery_01选择器
  17. C++中的预处理器概述
  18. 带nfc 的 android 华为,目前支持NFC的手机这么多,为什么只有小米华为能覆盖这么多城市...
  19. x11和Xorg线程之间有什么关系?
  20. 纽曼A15 连接电视 配置

热门文章

  1. 怎样用批处理来执行多个exe文件
  2. 软件工程-第三次作业
  3. iOS开发关于block学习的总结
  4. C#设计模式之装饰者
  5. java关键字--static--应用场景、特点和注意事项
  6. 简单的3个SQL视图搞定所有SqlServer数据库字典
  7. 访问SharePoint站点时,提示:Service Unavailable
  8. Oracle Execute Plan原理分析与实例分享之一
  9. 绝大多数人没玩过也没见过的现象:20个MYSQL进程共用1个3306端口
  10. UIBezierPath 的使用介绍