vue項(xiàng)目中使用html2canvas解決截圖不全的問(wèn)題
話不多說(shuō),直接上代碼?。?!
一、安裝插件
npm i html2canvas --save
二、頁(yè)面引入插件
import html2canvas from "html2canvas";
<div>
<el-button @click="downloadPicture">下載</el-button>
<div ref="imageDom">
<el-table
:data="tableData"
style="width: 100%"
:row-class-name="tableRowClassName"
>
<el-table-column prop="date" label="日期" width="180"> </el-table-column>
<el-table-column prop="name" label="姓名" width="180"> </el-table-column>
<el-table-column prop="address" label="地址"> </el-table-column>
<el-table-column prop="age" label="年齡"> </el-table-column>
</el-table>
</div>
</div>
頁(yè)面效果圖展示(有橫向和縱向的滾動(dòng)條):

重點(diǎn)思路:
首先是獲取要截取頁(yè)面的父元素,通過(guò)clone并緊隨于body之后,在生成幕布的時(shí)候不再拿著父元素去截取,而是截取clone的div,這樣的話就可以實(shí)現(xiàn)整個(gè)頁(yè)面的截取了
//截圖
downloadPicture () {
var width = this.$refs.imageDom.style.width
var cloneDom = this.$refs.imageDom.cloneNode(true)
cloneDom.style.position = 'absolute'
cloneDom.style.top = '0px'
cloneDom.style.zIndex = '-1'
cloneDom.style.width = width
document.body.appendChild(cloneDom)
html2canvas(cloneDom).then(canvas => {
// 轉(zhuǎn)成圖片,生成圖片地址
var imgUrl = canvas.toDataURL('image/png')
var eleLink = document.createElement('a')
eleLink.href = imgUrl // 轉(zhuǎn)換后的圖片地址
eleLink.download = 'pictureName'
// 觸發(fā)點(diǎn)擊
document.body.appendChild(eleLink)
eleLink.click()
// 然后移除
document.body.removeChild(eleLink)
})
cloneDom.style.display = 'none'
},
下載一鍵截屏效果圖展示如下(完美展示~~):

!!!注意:以上代碼沒(méi)有設(shè)置table高度和列固定,如果table設(shè)置了高度或者設(shè)置了列固定會(huì)出現(xiàn)截圖不全的問(wèn)題,此時(shí)需要?jiǎng)討B(tài)的給table設(shè)置高度和列固定, 不設(shè)置高度的時(shí)候高度設(shè)置為空值才生效,設(shè)置為none、auto、100%不生效
所有代碼如下:
<template>
<div ref="imageDom" >
<el-button @click="downloadPicture">下載</el-button>
<div >
<el-table
class="tableX"
:height="flag ? '400' : ''"
:data="tableData"
:row-class-name="tableRowClassName"
>
<el-table-column :fixed="flag?true:false" prop="date" label="日期" width="180">
</el-table-column>
<el-table-column prop="name" label="姓名" width="180">
</el-table-column>
<el-table-column prop="address" label="地址"> </el-table-column>
<el-table-column prop="age" label="年齡"> </el-table-column>
<el-table-column prop="sex" label="性別"> </el-table-column>
<el-table-column prop="hobby" label="愛(ài)好"> </el-table-column>
</el-table>
</div>
</div>
</template>
<script>
import html2canvas from "html2canvas";
export default {
data() {
return {
tableData: [
{
date: "2016-05-02",
name: "王小虎",
address: "開(kāi)始",
},
{
date: "2016-05-04",
name: "王小虎",
address: "上海",
age: 30,sex:'女',hobby:'愛(ài)好'
},
{
date: "2016-05-01",
name: "王小虎",
address: "上海",
age: 30,sex:'女',hobby:'愛(ài)好'
},
{
date: "2016-05-03",
name: "王小虎",
address: "上海市",
},
{
date: "2016-05-02",
name: "王小虎",
address: "上海",
age: 30,sex:'女',hobby:'愛(ài)好'
},
{
date: "2016-05-04",
name: "王小虎",
address: "上海",
age: 30,sex:'女',hobby:'愛(ài)好'
},
{
date: "2016-05-01",
name: "王小虎",
address: "上海",
age: 30,sex:'女',hobby:'愛(ài)好'
},
{
date: "2016-05-03",
name: "王小虎",
address: "上海市",
},
{
date: "2016-05-02",
name: "王小虎",
address: "上海",
age: 30,sex:'女',hobby:'愛(ài)好'
},
{
date: "2016-05-04",
name: "王小虎",
address: "上海",
age: 30,sex:'女',hobby:'愛(ài)好'
},
{
date: "2016-05-01",
name: "王小虎",
address: "上海",
age: 30,sex:'女',hobby:'愛(ài)好'
},
{
date: "2016-05-03",
name: "王小虎",
address: "上海市",
},
{
date: "2016-05-02",
name: "王小虎",
address: "上海",
age: 30,sex:'女',hobby:'愛(ài)好'
},
{
date: "2016-05-04",
name: "王小虎",
address: "上海",
age: 30,sex:'女',hobby:'愛(ài)好'
},
{
date: "2016-05-01",
name: "王小虎",
address: "上海",
age: 30,sex:'女',hobby:'愛(ài)好'
},
{
date: "2016-05-03",
name: "王小虎",
address: "上海市",
},
{
date: "2016-05-02",
name: "王小虎",
address: "上海",
age: 30,sex:'女',hobby:'愛(ài)好'
},
{
date: "2016-05-04",
name: "王小虎",
address: "上海",
age: 30,sex:'女',hobby:'愛(ài)好'
},
{
date: "2016-05-01",
name: "王小虎",
address: "上海",
age: 30,sex:'女',hobby:'愛(ài)好'
},
{
date: "2016-05-03",
name: "王小虎",
address: "結(jié)尾",
},
],
h: 400,
flag: true,
};
},
methods: {
tableRowClassName({ rowIndex }) {
if (rowIndex % 2 === 0) {
return "warning-row";
} else if (rowIndex % 2 !== 0) {
return "success-row";
}
return "";
},
//截圖
downloadPicture() {
this.flag = false;
this.$nextTick(() => {
var width = this.$refs.imageDom.style.width;
var cloneDom = this.$refs.imageDom.cloneNode(true);
cloneDom.style.position = "absolute";
cloneDom.style.top = "0px";
cloneDom.style.zIndex = "-1";
cloneDom.style.width = width;
console.log(cloneDom);
document.body.appendChild(cloneDom);
html2canvas(cloneDom).then((canvas) => {
// 轉(zhuǎn)成圖片,生成圖片地址
var imgUrl = canvas.toDataURL("image/png");
var eleLink = document.createElement("a");
eleLink.href = imgUrl; // 轉(zhuǎn)換后的圖片地址
eleLink.download = "pictureName";
// 觸發(fā)點(diǎn)擊
document.body.appendChild(eleLink);
eleLink.click();
// 然后移除
document.body.removeChild(eleLink);
});
cloneDom.style.display = "none";
this.flag = true;
});
},
},
};
</script>
<style>
.el-table .warning-row {
background: oldlace;
}
.el-table .success-row {
background: #f0f9eb;
}
</style>
到此這篇關(guān)于vue項(xiàng)目中使用html2canvas解決截圖不全的問(wèn)題的文章就介紹到這了,更多相關(guān)vue html2canvas截圖不全內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在Vue中使用scoped屬性實(shí)現(xiàn)樣式隔離的原因解析
scoped是Vue的一個(gè)特殊屬性,可以應(yīng)用于<style>標(biāo)簽中的樣式,這篇文章給大家介紹在Vue中,使用scoped屬性為什么可以實(shí)現(xiàn)樣式隔離,感興趣的朋友一起看看吧2023-12-12
深入理解Vue.js3中Reactive的實(shí)現(xiàn)
reactive是Vue 3的Composition API中的一個(gè)函數(shù),它允許你創(chuàng)建一個(gè)響應(yīng)式的數(shù)據(jù)對(duì)象,本文主要介紹了深入理解Vue.js3中Reactive的實(shí)現(xiàn),感興趣的可以了解一下2024-01-01
vue復(fù)制內(nèi)容到剪切板代碼實(shí)現(xiàn)
這篇文章主要給大家介紹了關(guān)于vue復(fù)制內(nèi)容到剪切板代碼實(shí)現(xiàn)的相關(guān)資料,在Web應(yīng)用程序中剪貼板(Clipboard)操作是非常常見(jiàn)的操作之一,需要的朋友可以參考下2023-08-08
如何解決element-ui中select下拉框popper超出彈框問(wèn)題
這篇文章主要介紹了如何解決element-ui中select下拉框popper超出彈框問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04
vue中如何給多個(gè)按鈕動(dòng)態(tài)添加類名
這篇文章主要介紹了vue中如何給多個(gè)按鈕動(dòng)態(tài)添加類名問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11

