vue項(xiàng)目中使用html2canvas解決截圖不全的問題
話不多說,直接上代碼!??!
一、安裝插件
npm i html2canvas --save
二、頁面引入插件
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>
頁面效果圖展示(有橫向和縱向的滾動(dòng)條):
重點(diǎn)思路:
首先是獲取要截取頁面的父元素,通過clone并緊隨于body之后,在生成幕布的時(shí)候不再拿著父元素去截取,而是截取clone的div,這樣的話就可以實(shí)現(xiàn)整個(gè)頁面的截取了
//截圖 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' },
下載一鍵截屏效果圖展示如下(完美展示~~):
!!!注意:以上代碼沒有設(shè)置table高度和列固定,如果table設(shè)置了高度或者設(shè)置了列固定會出現(xià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="愛好"> </el-table-column> </el-table> </div> </div> </template> <script> import html2canvas from "html2canvas"; export default { data() { return { tableData: [ { date: "2016-05-02", name: "王小虎", address: "開始", }, { date: "2016-05-04", name: "王小虎", address: "上海", age: 30,sex:'女',hobby:'愛好' }, { date: "2016-05-01", name: "王小虎", address: "上海", age: 30,sex:'女',hobby:'愛好' }, { date: "2016-05-03", name: "王小虎", address: "上海市", }, { date: "2016-05-02", name: "王小虎", address: "上海", age: 30,sex:'女',hobby:'愛好' }, { date: "2016-05-04", name: "王小虎", address: "上海", age: 30,sex:'女',hobby:'愛好' }, { date: "2016-05-01", name: "王小虎", address: "上海", age: 30,sex:'女',hobby:'愛好' }, { date: "2016-05-03", name: "王小虎", address: "上海市", }, { date: "2016-05-02", name: "王小虎", address: "上海", age: 30,sex:'女',hobby:'愛好' }, { date: "2016-05-04", name: "王小虎", address: "上海", age: 30,sex:'女',hobby:'愛好' }, { date: "2016-05-01", name: "王小虎", address: "上海", age: 30,sex:'女',hobby:'愛好' }, { date: "2016-05-03", name: "王小虎", address: "上海市", }, { date: "2016-05-02", name: "王小虎", address: "上海", age: 30,sex:'女',hobby:'愛好' }, { date: "2016-05-04", name: "王小虎", address: "上海", age: 30,sex:'女',hobby:'愛好' }, { date: "2016-05-01", name: "王小虎", address: "上海", age: 30,sex:'女',hobby:'愛好' }, { date: "2016-05-03", name: "王小虎", address: "上海市", }, { date: "2016-05-02", name: "王小虎", address: "上海", age: 30,sex:'女',hobby:'愛好' }, { date: "2016-05-04", name: "王小虎", address: "上海", age: 30,sex:'女',hobby:'愛好' }, { date: "2016-05-01", name: "王小虎", address: "上海", age: 30,sex:'女',hobby:'愛好' }, { 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解決截圖不全的問題的文章就介紹到這了,更多相關(guān)vue html2canvas截圖不全內(nèi)容請搜索腳本之家以前的文章或繼續(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ù)對象,本文主要介紹了深入理解Vue.js3中Reactive的實(shí)現(xiàn),感興趣的可以了解一下2024-01-01vue復(fù)制內(nèi)容到剪切板代碼實(shí)現(xiàn)
這篇文章主要給大家介紹了關(guān)于vue復(fù)制內(nèi)容到剪切板代碼實(shí)現(xiàn)的相關(guān)資料,在Web應(yīng)用程序中剪貼板(Clipboard)操作是非常常見的操作之一,需要的朋友可以參考下2023-08-08如何解決element-ui中select下拉框popper超出彈框問題
這篇文章主要介紹了如何解決element-ui中select下拉框popper超出彈框問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04vue中如何給多個(gè)按鈕動(dòng)態(tài)添加類名
這篇文章主要介紹了vue中如何給多個(gè)按鈕動(dòng)態(tài)添加類名問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11