摘要:近日,重構項目某一老模塊時,有一個功能是生成二維碼并下載,還可以復制鏈接。先想著新模塊中是否有生成二維碼的插件,看了下。項目中封裝了一個指令。一份用來顯示的。順帶說一下,復制粘貼復制粘貼老模塊中是用的倉庫。
近日,重構項目某一老模塊時,有一個功能是生成二維碼并下載,還可以復制鏈接。列表每項都有二維碼、下載二維碼和復制鏈接和列表上方總的二維碼。
老模塊是用的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~文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/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
閱讀 1020·2023-04-25 14:06
閱讀 2858·2021-10-14 09:42
閱讀 2135·2021-09-22 16:03
閱讀 978·2021-09-13 10:30
閱讀 1342·2019-08-29 15:41
閱讀 1789·2019-08-29 12:55