最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

 

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

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

生成帶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)化成了圖片,但是二維碼沒有展示出來,控制臺(tái)報(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)二維碼出來了,但是二維碼的大小不對(duì),并且控制臺(tái)還是存在報(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è)有更好的方法解決上面的問題,麻煩給留言,在此謝過。

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

logo地址是:

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

項(xiàng)目在本地啟動(dò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)。

最后采用的是微信長(zhǎng)按保存圖片

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

 

總結(jié)

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

相關(guān)文章

  • Vue項(xiàng)目通過vue-i18n實(shí)現(xiàn)國(guó)際化方案(推薦)

    Vue項(xiàng)目通過vue-i18n實(shí)現(xiàn)國(guó)際化方案(推薦)

    這篇文章主要介紹了Vue項(xiàng)目通過vue-i18n實(shí)現(xiàn)國(guó)際化方案,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • vue+render+jsx實(shí)現(xiàn)可編輯動(dòng)態(tài)多級(jí)表頭table的實(shí)例代碼

    vue+render+jsx實(shí)現(xiàn)可編輯動(dòng)態(tài)多級(jí)表頭table的實(shí)例代碼

    這篇文章主要介紹了vue+render+jsx實(shí)現(xiàn)可編輯動(dòng)態(tài)多級(jí)表頭table的實(shí)例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的工作或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • element-ui中select下拉框加載大數(shù)據(jù)渲染優(yōu)化方式

    element-ui中select下拉框加載大數(shù)據(jù)渲染優(yōu)化方式

    這篇文章主要介紹了element-ui中select下拉框加載大數(shù)據(jù)渲染優(yōu)化方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • vue+Element表格超鏈接跳轉(zhuǎn)方式

    vue+Element表格超鏈接跳轉(zhuǎn)方式

    在Vue項(xiàng)目中使用Element UI的表格組件時(shí),可以通過具體的單元格渲染方法添加超鏈接,在表格的某列中,利用模板或渲染函數(shù)插入<a>標(biāo)簽,設(shè)置其href屬性指向目標(biāo)URL,實(shí)現(xiàn)點(diǎn)擊跳轉(zhuǎn)功能,此方法適用于需要從表格信息中快速導(dǎo)航到相關(guān)詳細(xì)頁面的場(chǎng)景
    2024-09-09
  • vue中解決el-date-picker更改樣式不生效問題

    vue中解決el-date-picker更改樣式不生效問題

    在使用Vue.js進(jìn)行前端開發(fā)的過程中,Element?UI?是一個(gè)非常流行的UI庫,它提供了一套完整的組件來快速搭建美觀的用戶界面,但是我們經(jīng)常遇到一個(gè)問題使用Element?UI提供的el-date-picker組件時(shí),嘗試自定義其樣式卻無法生效,所以本文給大家介紹如何解決這個(gè)問題
    2024-10-10
  • vue?中使用?this?更新數(shù)據(jù)的一次問題記錄

    vue?中使用?this?更新數(shù)據(jù)的一次問題記錄

    這篇文章主要介紹了vue?中使用?this?更新數(shù)據(jù)的一次大坑?,我在 vue 實(shí)例中聲明了一個(gè)數(shù)組屬性如?books: [],在異步請(qǐng)求的回調(diào)函數(shù)中使用?this.books = res.data.data;?進(jìn)行數(shù)據(jù)更新,感興趣的朋友跟隨小編一起看看吧
    2022-11-11
  • vue3使用自定義hooks獲取dom元素的問題說明

    vue3使用自定義hooks獲取dom元素的問題說明

    這篇文章主要介紹了vue3使用自定義hooks獲取dom元素的問題說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue動(dòng)畫之第三方類庫實(shí)現(xiàn)動(dòng)畫方式

    Vue動(dòng)畫之第三方類庫實(shí)現(xiàn)動(dòng)畫方式

    這篇文章主要介紹了Vue動(dòng)畫之第三方類庫實(shí)現(xiàn)動(dòng)畫方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Vue2過渡標(biāo)簽transition使用動(dòng)畫方式

    Vue2過渡標(biāo)簽transition使用動(dòng)畫方式

    這篇文章主要介紹了Vue2過渡標(biāo)簽transition使用動(dòng)畫方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Vue項(xiàng)目的網(wǎng)絡(luò)請(qǐng)求代理到封裝步驟詳解

    Vue項(xiàng)目的網(wǎng)絡(luò)請(qǐng)求代理到封裝步驟詳解

    這篇文章主要介紹了Vue項(xiàng)目的網(wǎng)絡(luò)請(qǐng)求代理到封裝步驟,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04

最新評(píng)論

胶州市| 育儿| 三门县| 积石山| 通榆县| 望谟县| 宁城县| 明溪县| 桂平市| 鹿邑县| 丰城市| 安远县| 安吉县| 柳河县| 陈巴尔虎旗| 沂源县| 招远市| 江源县| 新闻| 兴隆县| 甘孜| 玉溪市| 丁青县| 大邑县| 南漳县| 盘山县| 南投县| 商南县| 海阳市| 正蓝旗| 剑阁县| 谷城县| 宁河县| 海南省| 论坛| 洞口县| 太仆寺旗| 资阳市| 淮安市| 美姑县| 新闻|