vue3如何將html元素變成canvas(海報(bào)生成),進(jìn)行圖片保存/截圖
將html元素變成canvas(海報(bào)生成),進(jìn)行圖片保存/截圖
// 網(wǎng)頁上只有一張圖片 我們可以直接就進(jìn)行圖片保存 // 但是你想 保存這張圖片的時候 順便把下面的字也帶上 相當(dāng)于截圖 那請你像我這樣做 <div id="capture" style="padding: 10px; background: #fff"> <img :src="whoImg" style="width: 300px" alt="" /> <h4 style="color: #000">Hello world!</h4> </div> // 觸發(fā)按鈕 <button @click="isShow()">生成海報(bào)</button> //這里是創(chuàng)建一個容器 存放你待會想保存的圖片 也就是你想要的截圖 <div ref="wrapper" id="wrapper" v-show="show" @click="remove()"></div> // 引入插件 沒有就直接下 npm install html2canvas filesaver --save import html2canvas from 'html2canvas'; setup() { // 隨便搞張圖 let whoImg=require('../assets/1.png').default; // 綁定你的容器 let wrapper = ref(); // 控制容器顯示 let show = ref(false); // 鎖 防止 多次生成 let lock = ref(1); // 觸發(fā) const isShow = () => { show.value = true; // html2canvas的方法 傳你要截圖的盒子 會把盒子內(nèi)的所有元素都變成一張canvas圖片 html2canvas(document.querySelector('#capture')).then((canvas) => { if (lock.value) { // 給容器加入這個canvas wrapper.value.appendChild(canvas); lock.value = 0; } }); }; // 移除這個容器內(nèi)容 const remove = () => { show.value = false; if (!lock.value) { lock.value = 1; wrapper.value.innerHTML = ''; } }; } // 圖片大小 img { width: 300px; } // 放canvas這個容器的大小 #wrapper { width: 500px; height: 500px; position: fixed; top: 0; left: 0; // 這下面是vant自定義的組件樣式用的 不打緊 z-index: var(--van-overlay-z-index); background-color: var(--van-overlay-background-color); }
使用html2canvas將頁面轉(zhuǎn)化為圖片
微信端將頁面截屏之后保存到本地,使用了html2canvas插加粗樣式
install
npm install --save html2canvas
在所需頁面引入
import html2canvas from "html2canvas"
use
<div ref="imageWrapper"> ? ? ? <div class="success"> ? ? ? ? <div class="img"> ? ? ? ? ? <img class="img-icon" src="../assets/success.png"/> ? ? ? ? ? <p style="font-weight: 600; font-size: 18px">支付成功</p> ? ? ? ? </div> ? ? ? </div> ? ? ? <div class="success-detail"> ? ? ? ? <el-row style="margin-top: 10px;"> ? ? ? ? ? <el-col :span="5" class="col-left-suc">收款商家</el-col> ? ? ? ? ? <el-col :span="16" class="col-right">{{merchant}}</el-col> ? ? ? ? </el-row> ? ? ? ? <el-row style="margin-top: 10px;"> ? ? ? ? ? <el-col :span="5" class="col-left-suc">費(fèi)用名稱</el-col> ? ? ? ? ? <el-col :span="16" class="col-right">{{contName}}</el-col> ? ? ? ? </el-row> ? ? ? ? <el-row style="margin-top: 10px;"> ? ? ? ? ? <el-col :span="5" class="col-left-suc">繳費(fèi)金額</el-col> ? ? ? ? ? <el-col :span="16" class="col-right">{{chargePrice}}元</el-col> ? ? ? ? </el-row> ? ? ? </div> ? ? </div> ? ? <div class="button"> ? ? ? <el-button style="width: 70%;" type="success" size="small" @click="toImage">生成截圖</el-button> ? ? </div>
vue中用ref來指定你需要截屏的dom
toImage() { ? ? ? ? html2canvas(this.$refs.imageWrapper).then(canvas => { ? ? ? ? ? let dataURL = canvas.toDataURL("image/png"); ? ? ? ? ? this.imgUrl = dataURL; ? ? ? ? ? if (this.imgUrl !== "") { ? ? ? ? ? ? this.dialogTableVisible = true; ? ? ? ? ? } ? ? ? ? }); ? ? ? }
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue element-ul實(shí)現(xiàn)展開和收起功能的實(shí)例代碼
這篇文章主要介紹了vue element-ul實(shí)現(xiàn)展開和收起功能的實(shí)例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11vueCli?4.x升級5.x報(bào)錯:Progress?Plugin?Invalid?Options的解決方法
本文主要介紹了vueCli?4.x升級5.x報(bào)錯:Progress?Plugin?Invalid?Options的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-01-01詳解Vue開發(fā)網(wǎng)站seo優(yōu)化方法
這篇文章主要介紹了Vue開發(fā)網(wǎng)站seo優(yōu)化方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05從Element日期組件源碼中學(xué)到的兩個工具方法技巧
這篇文章主要介紹了從Element日期組件源碼中學(xué)到的兩個工具方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08Vue中使用ElementUI使用第三方圖標(biāo)庫iconfont的示例
這篇文章主要介紹了Vue中使用ElementUI使用第三方圖標(biāo)庫iconfont的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-10-10vue實(shí)現(xiàn)數(shù)字+英文字母組合鍵盤功能
這篇文章主要介紹了vue實(shí)現(xiàn)數(shù)字+英文字母組合鍵盤功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12