摘要:近日,重構(gòu)項(xiàng)目某一老模塊時(shí),有一個(gè)功能是生成二維碼并下載,還可以復(fù)制鏈接。先想著新模塊中是否有生成二維碼的插件,看了下。項(xiàng)目中封裝了一個(gè)指令。一份用來顯示的。順帶說一下,復(fù)制粘貼復(fù)制粘貼老模塊中是用的倉庫。
近日,重構(gòu)項(xiàng)目某一老模塊時(shí),有一個(gè)功能是生成二維碼并下載,還可以復(fù)制鏈接。列表每項(xiàng)都有二維碼、下載二維碼和復(fù)制鏈接和列表上方總的二維碼。
老模塊是用的qrocode中文文檔,qrcode github。
先想著新模塊中是否有生成二維碼的插件,看了下package.json。
有安裝一個(gè)vue-qriously。但搜索了一下,竟然沒有使用,可能是因?yàn)楹芏喽S碼都是后端生成返回鏈接給前端的。而在其他H5、微信項(xiàng)目中使用了??戳讼逻@個(gè)項(xiàng)目star數(shù)是113。但我不想重新引入老模塊的qrcodejs,重新引入其他的二維碼插件,相對比較麻煩。于是就保持統(tǒng)一用vue-qriously了。
猜想當(dāng)時(shí)引入這個(gè)是vue 資源合集awesome-vue中,qrcode相關(guān)第一個(gè)就是vue-qriously。
// 入口js文件 // npm install vue-qriously -S import Vue from "vue"; import VueQriously from "vue-qriously"; Vue.use(VueQriously);
// vue 文件
更多參數(shù)配置可以查看:github 倉庫 v-qriously.vue源碼
查看代碼可以發(fā)現(xiàn),開頭引用了qrious,這個(gè)star就多一點(diǎn),600多。
import Qrious from "qrious"
qrious github 地址
qrious 文檔
粗略的翻看下以上相關(guān)文檔,寫完正準(zhǔn)備要做下載功能。這時(shí)發(fā)現(xiàn),哎呀,竟然就是只生成了一個(gè)canvas。
于是百度(暴露了用百度...我也想用谷歌,但現(xiàn)在不行...)了下canvas如何轉(zhuǎn)圖片。
stackoverflow Capture HTML Canvas as gif/jpg/png/pdf?
var canvas = document.getElementById("mycanvas"); var imgSrc = canvas.toDataURL("image/png"); document.write(""); // 搜索到一些其他的方案,感覺挺麻煩。 // 嗯,這個(gè)簡單。想著我們項(xiàng)目兼容性沒什么要求,于是就用這個(gè)了。
生成了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);
但這樣寫也相對比較麻煩。
項(xiàng)目中封裝了一個(gè)v-click指令。
/** * vClick 觸發(fā)點(diǎn)擊 * @type {Object} */ export const vClick = { directives: { click: { /** * 值更新時(shí)候觸發(fā)點(diǎn)擊 * @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(); } }, }, }, };
這就實(shí)現(xiàn)了下載的資源是160 * 160,用樣式控制圖片顯示80 * 80。
代碼寫完,覺得應(yīng)該給vue-qriously寫個(gè)pr,實(shí)現(xiàn) 不僅僅是渲染canvas,而是讓大家可以選擇時(shí)img還是canvas。又去翻了翻這個(gè)項(xiàng)目的issue,有一個(gè)issue鏈接:how to make this canvas exchange to img 就是說的這個(gè)。還沒關(guān)閉。i think u can create type let user select img and canvas.// 有一個(gè)回復(fù) If you want to make it become downloadable, maybe you can transform it from canvas easily by canvas.toDataURL()文章寫到這里,我發(fā)現(xiàn)這樣似乎不太妥。我的場景,是點(diǎn)擊時(shí)顯示浮層(浮層有二維碼和復(fù)制鏈接地址和下載二維碼按鈕等),獲取canvas元素,去轉(zhuǎn)成img src,再去渲染到頁面,而且圖片可能會(huì)閃,因?yàn)槭菍?shí)際大小是160,樣式強(qiáng)制控制在80。
cliploard 復(fù)制粘貼
何不生成兩份,一份是用來獲取資源下載的。一份用來顯示的。嗯,之后去優(yōu)化下。
順帶說一下,復(fù)制粘貼老模塊中是用的cliploardclipboard github倉庫。就是我引入的。
新模塊還沒使用過,但依然使用這個(gè)。
// 安裝 // npm install clipboard --save // 封裝成一個(gè)函數(shù) import Clipboard from "clipboard"; export default function Clip(event,text) { const clipboard = new Clipboard(event.target, { text: () => text }); clipboard.on("success", () => { console.log("復(fù)制成功"); clipboard.off("error"); clipboard.off("success"); clipboard.destroy(); }); clipboard.on("error", () => { console.log("復(fù)制失敗,請刷新試試"); clipboard.off("error") clipboard.off("success") clipboard.destroy() }); clipboard.onClick(event); }當(dāng)然也可以封裝成vue指令。
小結(jié)
可以參考vue-element-admin這個(gè)項(xiàng)目
之前我看的時(shí)候還是3000多star,現(xiàn)在1.2w+,說明值得學(xué)習(xí)。
另外推薦awesomes網(wǎng)站 工具類庫合集1、引入第三方插件等使用時(shí),多查看github 文檔 issue等,在技術(shù)社區(qū)搜索別人使用的方案。
關(guān)于
2、選用第三方插件時(shí),盡可能挑選star比較多的,issue處理比較及時(shí)的,在更新維護(hù)的。
3、富余時(shí)間可以多研究下別人的項(xiàng)目是如何組織文件,和實(shí)現(xiàn)的一些常用功能的。
4、盡可能去優(yōu)化自己的代碼,總結(jié)回顧。作者:常以
軒轅Rowboat若川為名混跡于江湖。前端路上 | PPT愛好者 | 所知甚少,唯善學(xué)。
個(gè)人博客
segmentfault前端視野專欄,開通了前端視野專欄,歡迎關(guān)注
掘金專欄,歡迎關(guān)注
知乎前端視野專欄,開通了前端視野專欄,歡迎關(guān)注
github,歡迎follow~文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/95010.html
摘要:在谷歌找多頁面,實(shí)例還是比較少,功夫不負(fù)有心人,在那找到了,具體可以到這個(gè),非常感謝童鞋,今天要講的內(nèi)容是基于童鞋的多頁面實(shí)例上再優(yōu)化的。有需要一起交流的可以加我的微信,,記得備注技術(shù)交流哈。 vue+webpack是否有多頁面 目前使用vue來做項(xiàng)目,估計(jì)大部分都是單頁面(SPA)應(yīng)用,一個(gè)輕型的 MVVM 框架,誰用了MVVM框架,就再也回不去JQ時(shí)代了,哈哈。 在手機(jī)端的項(xiàng)目,使...
摘要:本文使用署名國際許可協(xié)議,歡迎轉(zhuǎn)載或重新修改使用,但需要注明來源。署名國際本文作者蘇洋創(chuàng)建時(shí)間年月日統(tǒng)計(jì)字?jǐn)?shù)字閱讀時(shí)間分鐘閱讀本文鏈接使用和快速實(shí)現(xiàn)一個(gè)在線的解碼服務(wù)本文將會(huì)介紹如何使用完成一個(gè)簡單的二維碼解析服務(wù),全部代碼在行以內(nèi)。 本文使用「署名 4.0 國際 (CC BY 4.0)」許可協(xié)議,歡迎轉(zhuǎn)載、或重新修改使用,但需要注明來源。 署名 4.0 國際 (CC BY 4.0) ...
摘要:前陣子微信小程序的推出快速占據(jù)了桌面,手機(jī)廠商們坐不住了,為了搶回移動(dòng)端應(yīng)用分發(fā)入口,前幾天中國通信院等協(xié)會(huì)聯(lián)合小米華為等一眾手機(jī)廠商共同發(fā)布了快應(yīng)用??偟膩碚f,這個(gè)文件就是微信小程序清單文件的混合體,用來描述應(yīng)用和做一些基本配置。 前陣子微信小程序的推出快速占據(jù)了Android桌面,手機(jī)廠商們坐不住了,為了搶回移動(dòng)端應(yīng)用分發(fā)入口,前幾天中國通信院等協(xié)會(huì)聯(lián)合小米、華為、OPPO等一眾手...
閱讀 1228·2023-04-25 20:56
閱讀 2286·2023-04-25 14:42
閱讀 1036·2023-04-25 14:06
閱讀 2876·2021-10-14 09:42
閱讀 2153·2021-09-22 16:03
閱讀 1001·2021-09-13 10:30
閱讀 1356·2019-08-29 15:41
閱讀 1812·2019-08-29 12:55