詳解Vue實(shí)現(xiàn)鏈接生成二維碼并支持下載
在現(xiàn)代 Web 應(yīng)用中,快速分享鏈接是一項(xiàng)常見(jiàn)需求。二維碼作為一種簡(jiǎn)潔的分享方式,受到了廣泛歡迎。如何在 Vue.js 中實(shí)現(xiàn)前端生成鏈接二維碼的功能,成為了許多開(kāi)發(fā)者關(guān)注的焦點(diǎn)。本文將介紹如何使用 Vue 純前端技術(shù)實(shí)現(xiàn)動(dòng)態(tài)生成鏈接二維碼的方法,無(wú)需后端參與。
本項(xiàng)目基于Vite+Vue3,這里假設(shè)你已經(jīng)搭建好項(xiàng)目了前端頁(yè)面使用el-input+el-popover來(lái)實(shí)現(xiàn)
為了在應(yīng)用程序中實(shí)現(xiàn)鏈接生成二維碼的功能,我們需要依賴一個(gè)npm 包qrcode.vue。這個(gè)包提供了一個(gè)簡(jiǎn)單而強(qiáng)大的方法,讓我們能夠輕松地在 Vue.js 應(yīng)用程序中生成二維碼,無(wú)需編寫冗長(zhǎng)復(fù)雜的代碼,極大地簡(jiǎn)化了開(kāi)發(fā)流程,提高了開(kāi)發(fā)效率。
具體屬性配置可以查看qrcode.vue官方文檔:github.com/scopewu/qrcode.vue
安裝
npm install --save qrcode.vue
在需要使用的文件中引入qrcode
<script setup>
import QrcodeVue from 'qrcode.vue'
const level = ref('M')
const renderAs = ref('svg')
import { ref } from 'vue'
const link = ref('https://www.mi.com/')
const onQRCode = () =>{}
</script>
<template>
<h1>前端實(shí)現(xiàn)鏈接生成二維碼</h1>
<el-input v-model="link" placeholder="Please input" style="width: 400px;">
<template #append>
<el-popover
placement="bottom"
:width="160"
trigger="click"
>
<template #reference>
<div class="qrcode">二維碼</div>
</template>
<template #default>
<div class="code-container">
<div class="title">掃描二維碼,分享此鏈接</div>
<qrcode-vue id="svgRef" :value="link" :size="120" :level="level" :render-as="renderAs" />
<el-button icon="sc-icon-ImportsIcon" style="width: 120px;margin-top: 10px;" class="m-t10" size="small" @click="downloadQrCode">下載</el-button>
</div>
</template>
</el-popover>
</template>
</el-input>
</template>
<style scoped>
.code-container {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.qrcode {
cursor: pointer;
}
.title {
font-size: 12px;
color: #8e939c;
margin-bottom: 5px;
}
</style>
效果如下

下載二維碼代碼實(shí)現(xiàn)
/* 下載二維碼 */
const downloadQrCode = () =>{
const node = document.getElementById('svgRef')
covertSVG2Image(node, '掃描二維碼,分享此鏈接', 120, 120)
};
/**
* 將svg導(dǎo)出成圖片
* @param node svg節(jié)點(diǎn) => document.querySelector('svg')
* @param name 生成的圖片名稱
* @param width 生成的圖片寬度
* @param height 生成的圖片高度
* @param type 生成的圖片類型
*/
const covertSVG2Image = (node, name, width, height, type = 'png') => {
let serializer = new XMLSerializer()
let source = '<?xml version="1.0" standalone="no"?>\r\n' + serializer.serializeToString(node)
let image = new Image()
image.src = 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(source)
let canvas = document.createElement('canvas')
canvas.width = width
canvas.height = height
let context = canvas.getContext('2d')
context.fillStyle = '#fff'
context.fillRect(0, 0, 10000, 10000)
image.onload = function () {
context.drawImage(image, 0, 0)
let a = document.createElement('a')
a.download = `${name}.${type}`
a.href = canvas.toDataURL(`image/${type}`)
a.click()
}
}
下載的二維碼

以上所述即是如何在前端實(shí)現(xiàn)二維碼生成以及支持下載的完整方案。
到此這篇關(guān)于詳解Vue實(shí)現(xiàn)鏈接生成二維碼并支持下載的文章就介紹到這了,更多相關(guān)Vue鏈接生成二維碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue3+Ant?design?實(shí)現(xiàn)Select下拉框一鍵全選/清空功能
在做后臺(tái)管理系統(tǒng)項(xiàng)目的時(shí)候,產(chǎn)品增加了一個(gè)在Select選擇器中添加一鍵全選和清空的功能,他又不讓在外部增加按鈕,其實(shí)如果說(shuō)在外部增加按鈕實(shí)現(xiàn)全選或者清空的話,功能比較簡(jiǎn)單的,下面給大家分享Vue3+Ant?design?實(shí)現(xiàn)Select下拉框一鍵全選/清空功能,需要的朋友可以參考下2024-05-05
vue中img或元素背景圖片無(wú)法顯示或路徑錯(cuò)誤的解決
這篇文章主要介紹了vue中img或元素背景圖片無(wú)法顯示或路徑錯(cuò)誤的解決方案,具有很好的參考價(jià)值。希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
vue-cli-service和webpack-dev-server的區(qū)別及說(shuō)明
這篇文章主要介紹了vue-cli-service和webpack-dev-server的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10
詳解element-ui設(shè)置下拉選擇切換必填和非必填
這篇文章主要介紹了詳解element-ui設(shè)置下拉選擇切換必填和非必填,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
vue路由對(duì)不同界面進(jìn)行傳參及跳轉(zhuǎn)的總結(jié)
這篇文章主要介紹了vue路由對(duì)不同界面進(jìn)行傳參及跳轉(zhuǎn)的總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
vue實(shí)現(xiàn)登錄時(shí)滑塊驗(yàn)證
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)登錄時(shí)滑塊驗(yàn)證,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
想到頭禿也想不到的Vue3復(fù)用組件還可以這么hack的用法
這篇文章主要為大家介紹了想到頭禿也想不到的Vue3復(fù)用組件還可以這么hack的用法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
vue3前端實(shí)現(xiàn)微信支付詳細(xì)步驟
這篇文章主要給大家介紹了vue3前端實(shí)現(xiàn)微信支付的詳細(xì)步驟,隨著移動(dòng)端的普及和互聯(lián)網(wǎng)購(gòu)買需求的增加,微信支付在電商領(lǐng)域中發(fā)揮著越來(lái)越重要的作用,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下2023-11-11

