亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

使用vue實(shí)現(xiàn)HTML頁面生成圖片的方法

 更新時(shí)間:2020年03月12日 15:59:44   作者:快狗打車前端團(tuán)隊(duì)  
這篇文章主要介紹了使用vue實(shí)現(xiàn)HTML頁面生成圖片的相關(guān)知識,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

隨著網(wǎng)絡(luò)的發(fā)展,越來越多的網(wǎng)絡(luò)平臺應(yīng)運(yùn)而生。如何獲得更多的流量,吸引更多的眼球已經(jīng)成為網(wǎng)絡(luò)平臺生存、發(fā)展的必要條件。現(xiàn)在網(wǎng)絡(luò)平臺最常見的一種宣傳方式就是人邀人。

我最近就接到一個(gè)需求,做一個(gè) 海報(bào)頁面,并且能保存到手機(jī) ,方便用戶分享給朋友,希望能夠達(dá)到人邀人的效果。

 

給人第一感覺這個(gè)需求就是保存圖片的功能,當(dāng)時(shí)梳理是卻發(fā)現(xiàn)不是那么簡單:

  1.動態(tài)生成一張帶logo的二維碼
  2.整個(gè)海報(bào)的html部分轉(zhuǎn)化成圖片
  3.保存圖片至手機(jī)相冊

生成帶logo的二維碼

用 vue_qrcodes 生成帶logo的二維碼

安裝

npm install vue_qrcodes -- save

使用

<!--部分html代碼-->
<qrcode :url="qrcodeUrl"
 :iconurl="iconurl"
 :wid="298"
 :hei="278"
 :imgwid="100"
 :imghei="100">
</qrcode>

// 部分js代碼
import qrcode from 'vue_qrcodes'
//...省略其他代碼
components: {
 qrcode
 }

問題來了:二維碼出現(xiàn)了,但是二維碼和logo大小并不是你想要,無法自適應(yīng)。那就需要我們重置二維碼和logo的樣式。

.logoimg {
 height: 100px !important;
 width: 100px !important;
 margin-top: -50px !important;
 margin-left: -50px !important;
 }
#qrcode {
 margin-top: 20px;
 img {
 height: 278px !important;
 width: 298px !important;
 }
 }

html轉(zhuǎn)化為base64圖片

html轉(zhuǎn)化為canvas中我選用組件 html2canvas

yarn add html2canvas

import html2canvas from 'html2canvas'

為了防止頁面有閃屏我用了兩個(gè)div,一個(gè)存放原來的dom,一個(gè)存放canvas的生成的圖片,再v-if控制展示的元素。

 

js調(diào)用函數(shù):

htmlToCanvas() {
 html2canvas(this.$refs.bill, {})
 .then((canvas) => {
 let imageUrl = canvas.toDataURL('image/png'); // 將canvas轉(zhuǎn)成base64圖片格式
 this.canvasImageUrl = imageUrl;
 this.isDom = false;
 });
}
// 二維碼地址
this.qrcodeUrl = data.data.inviteCodeAddress
// 調(diào)用html轉(zhuǎn)化canvas函數(shù)
this.htmlToCanvas();

結(jié)果如圖:

 

頁面轉(zhuǎn)化成了圖片,但是二維碼沒有展示出來,控制臺報(bào)錯(cuò):

 

除二維碼其他部分已經(jīng)轉(zhuǎn)化為圖片,二維碼不顯示,原因有兩種可能:

轉(zhuǎn)化時(shí)二維碼還沒有加載完成

轉(zhuǎn)化二維碼的過程中報(bào)錯(cuò)了

首先嘗試了nextTick

使用 nextTick 將回調(diào)延遲到下次DOM更新循環(huán)之后執(zhí)行

// 二維碼地址
this.qrcodeUrl = data.data.inviteCodeAddress 
this.$nextTick(() => {
 // 跳用html轉(zhuǎn)化canvas函數(shù)
 this.htmlToCanvas(); 
 })

 

發(fā)現(xiàn)二維碼出來了,但是二維碼的大小不對,并且控制臺還是存在報(bào)錯(cuò)。雖然問題沒有完全解決,但是二維碼出現(xiàn)了??梢宰C明二維碼不展示的原因是,轉(zhuǎn)化時(shí)二維碼沒有加載完成。

再嘗試使用setTimeout

使用 setTimeout 將回調(diào)延遲到指定時(shí)間之后執(zhí)行

// 二維碼地址
this.qrcodeUrl = data.data.inviteCodeAddress 
setTimeout(()=>{
 // 調(diào)用html轉(zhuǎn)化canvas函數(shù)
 this.htmlToCanvas(); 
}, 200)

查看效果:

 

注:setTimeout是我目前能想到延遲加載方法。各位大佬們,如果這個(gè)有更好的方法解決上面的問題,麻煩給留言,在此謝過。

頁面正常,控制臺沒有報(bào)錯(cuò),可是logo沒有展示出來。

logo地址是:

iconurl: 'https://static.daojia.com/assets/project/tosimple-pic/LOGO_1576564983633.png',

項(xiàng)目在本地啟動,可能存在跨域問題。

htmlToCanvas() {
 html2canvas(this.$refs.bill, {
 useCORS: true // 解決圖片跨域問題
 }).then((canvas) => {
 // 將canvas轉(zhuǎn)成base64圖片格式
 let imageUrl = canvas.toDataURL('image/png'); 
 this.canvasImageUrl = imageUrl;
 this.isDom = false;
 }).catch((e) => console.log(e));
 }

至此html成功轉(zhuǎn)化為圖片。

圖片保存至手機(jī)

首先嘗試了JS-SDK中的下載圖片downloadImage
經(jīng)過各種嘗試并不能實(shí)現(xiàn)。

最后采用的是微信長按保存圖片

海報(bào)部分已經(jīng)轉(zhuǎn)化為圖片,無需再開發(fā),只要提示用戶長按圖片可以保存即可。

 

總結(jié)

到此這篇關(guān)于使用vue實(shí)現(xiàn)HTML頁面生成圖片的文章就介紹到這了,更多相關(guān)vue html頁面生成圖片內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue遮罩層如何阻止?jié)L動

    vue遮罩層如何阻止?jié)L動

    這篇文章主要介紹了vue遮罩層如何阻止?jié)L動,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Vue實(shí)現(xiàn)移除數(shù)組中特定元素的方法小結(jié)

    Vue實(shí)現(xiàn)移除數(shù)組中特定元素的方法小結(jié)

    這篇文章主要介紹了Vue如何優(yōu)雅地移除數(shù)組中的特定元素,文中介紹了單個(gè)去除和批量去除的操作方法,并通過代碼示例講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-03-03
  • 腳手架(vue-cli)創(chuàng)建Vue項(xiàng)目的超詳細(xì)過程記錄

    腳手架(vue-cli)創(chuàng)建Vue項(xiàng)目的超詳細(xì)過程記錄

    用vue-cli腳手架可以快速的構(gòu)建出一個(gè)前端vue框架的項(xiàng)目結(jié)構(gòu),下面這篇文章主要給大家介紹了關(guān)于腳手架(vue-cli)創(chuàng)建Vue項(xiàng)目的超詳細(xì)過程,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • Vue 兩個(gè)字段聯(lián)合校驗(yàn)之修改密碼功能的實(shí)現(xiàn)

    Vue 兩個(gè)字段聯(lián)合校驗(yàn)之修改密碼功能的實(shí)現(xiàn)

    本文以校驗(yàn)兩次密碼的一致性應(yīng)用,給出兩個(gè)可變屬性值的字段之間的聯(lián)合校驗(yàn)的典型解決方案,通過實(shí)例代碼給大家介紹Vue 兩個(gè)字段聯(lián)合校驗(yàn)之修改密碼功能的實(shí)現(xiàn),需要的朋友一起看看吧
    2021-07-07
  • Vue中fragment.js使用方法詳解

    Vue中fragment.js使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了Vue中fragment.js的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • vue 在服務(wù)器端直接修改請求的接口地址

    vue 在服務(wù)器端直接修改請求的接口地址

    這篇文章主要介紹了vue 在服務(wù)器端直接修改請求的接口地址的方法,幫助大家更好的理解和使用vue,感興趣的朋友可以了解下
    2020-12-12
  • vue+webpack 更換主題N種方案優(yōu)劣分析

    vue+webpack 更換主題N種方案優(yōu)劣分析

    這篇文章主要介紹了vue+webpack 更換主題N種方案優(yōu)劣分析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Vue+Echart柱狀圖實(shí)現(xiàn)疫情數(shù)據(jù)統(tǒng)計(jì)

    Vue+Echart柱狀圖實(shí)現(xiàn)疫情數(shù)據(jù)統(tǒng)計(jì)

    這篇文章主要介紹了在Vue nuxt項(xiàng)目中,如何使用Echart(百度圖表)柱狀圖來實(shí)現(xiàn)疫情數(shù)據(jù)統(tǒng)計(jì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2021-12-12
  • Vue項(xiàng)目全局配置微信分享思路詳解

    Vue項(xiàng)目全局配置微信分享思路詳解

    這篇文章給大家介紹了vue項(xiàng)目全局配置微信分享思路講解,使用vue作為框架,使用vux作為ui組件庫,具體內(nèi)容詳情大家跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-05-05
  • 解決Vue開發(fā)中對話框被遮罩層擋住的問題

    解決Vue開發(fā)中對話框被遮罩層擋住的問題

    在Vue的開發(fā)中,一旦我們用到對話框,經(jīng)常出現(xiàn)的問題是對話框被遮罩層擋住,怎么來解決這個(gè)問題呢?下面小編給大家?guī)砹薞ue開發(fā)中對話框被遮罩層擋住的問題及解決方法,一起看看吧
    2018-11-11

最新評論