欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

前端html2canvas生成截圖實現步驟與踩坑記錄

 更新時間:2024年09月28日 08:55:11   作者:Lucky_Dog_c  
這篇文章主要介紹了前端html2canvas生成截圖實現步驟與踩坑的相關資料,主要步驟包括使用html2canvas生成截圖以及處理圖片跨域和CSS樣式丟失問題,可選方案包括轉換圖片為base64編碼和使用domtoimage插件,需要的朋友可以參考下

需求:

點擊下載可以導出組件的截圖及數據信息文件

分析:

前端生成組件截圖,帶著其他參數傳給后端,拿到excel文件并下載。關鍵在于生成組件的截圖,這里通過html2canvas插件來實現。

實現步驟

1.下載插件

npm install html2canvas

2.引入

import html2canvas from 'html2canvas'

3.通過ref拿到要下載組件的dom元素

	//下載圖標,綁定下載事件
	<i class="el-icon-download" style="cursor: pointer;" @click="download"></i>

	//需要生成截圖的部分
	<div class='wrapper' ref='screen'>
	...
	</div>

4.通過html2canvas生成截圖

	download() {
		//el的全局loading,根據需求,可加可不加,在下載完成時或請求完成時用 loading.close()關閉
        const loading = this.$loading({ 
          lock: true,
          text: '文件下載中',
          spinner: 'el-icon-loading',
          background: 'rgba(0, 0, 0, 0.8)'
        });
        
        html2canvas(this.$refs.screen, {
          backgroundColor: null,//畫布背景色(如果未在DOM中指定)。設置null為透明
          useCORS: true,    //允許跨域
          scale: 1   		//用于渲染的比例
        }).then((canvas) => {
           // 此時已經生成我們想要的截圖,可以下載查看
           const url = canvas.toDataURL('image/png') //轉圖片鏈接,為圖片的base64形式
           const a = document.createElement('a')
           const event = new MouseEvent('click')
           a.download = '圖片'
           a.href = url
           a.dispatchEvent(event)
           loading.close()
           
		   // 轉為png格式文件格式傳以給后端
		   // formData即為我們要傳的內容,如果還有其他參數要傳輸可以通過formData.append('key',value)來添加
		   const formData = new FormData()
		   canvas.toBlob(function(blob) {
            formData.append('image', blob, 'image.png')
          })
        })
      },

可能遇到的問題

1.圖片跨域

因為項目的圖片資源是托管在另一個平臺上,在生成截圖時,原有dom的圖片由于跨域 canvas “被污染”,一直無法生成,嘗試了多種辦法,設置useCORS: true且給img標簽設crossorigin="anonymous"也無法解決。最后找到兩種解決方案:一種是把圖片轉為編碼格式base64,此方法可以純前端解決該問題,另一種是修改服務端的配置來解決跨域問題。采用的是第一種方案,附上轉base64的方法。(但這種方法也會有代碼冗余體積增大,可讀性降低等缺點)

imgUrlToBase64(imgUrl) {
       const image = new Image();
       image.setAttribute('crossOrigin', 'anonymous');
       const imageUrl = imgUrl;
       image.src = imageUrl
       // image.onload為異步加載
       image.onload = () => {
         var canvas = document.createElement('canvas');
         canvas.width = image.width;
         canvas.height = image.height;
         var context = canvas.getContext('2d');
         context.drawImage(image, 0, 0, image.width, image.height);
         var quality = 0.8;
         const dataurl = canvas.toDataURL('image/png', quality);
         console.log(dataurl, 'dataurl64')
       }
     },

2.css樣式丟失

html2canvas的屏幕截圖是基于 DOM 的,不會生成實際的屏幕截圖,而是基于頁面上可用的信息構建屏幕截圖,html2canvas庫對以下樣式可能無效或不完全支持

  • CSS動畫和過渡效果:html2canvas庫在截圖時不會觸發(fā)CSS動畫和過渡效果,只會捕捉到元素的初始狀態(tài)。
  • CSS偽元素(如::before和::after):html2canvas庫無法捕捉到CSS偽元素的樣式。
  • CSS濾鏡效果:html2canvas庫無法捕捉到CSS濾鏡效果(如blur、grayscale等)。
  • CSS變量(CustomProperties):html2canvas庫無法解析和應用CSS變量。
  • SVG圖像:html2canvas庫對SVG圖像的支持有限,可能無法正確渲染和捕捉SVG圖像。

生成截圖的其他方案domtoimage

由于html2canvas這個插件在生成截圖的時候有很多弊端,在canvas繪制時耗時長,且繪制時屏幕會阻塞無法操作,后續(xù)截圖選擇了其他方案,使用domtoimage發(fā)現絲滑很多,可參考文章使用domtoimage生成截圖。

總結

到此這篇關于前端html2canvas生成截圖實現步驟與踩坑記錄的文章就介紹到這了,更多相關前端html2canvas生成截圖內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • JavaScript從數組(數組對象)中刪除特定數據的方法

    JavaScript從數組(數組對象)中刪除特定數據的方法

    這篇文章主要給大家介紹了關于JavaScript從數組(數組對象)中刪除特定數據的相關資料,js在前臺界面中舉足輕重,在使用js刪除數組時遇到一些問題,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-09-09
  • JavaScript函數this指向問題詳解

    JavaScript函數this指向問題詳解

    這篇文章主要為大家介紹了JavaScript函數this指向,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • js+csss實現的一個帶復選框的下拉框

    js+csss實現的一個帶復選框的下拉框

    用js+csss實現的一個帶復選框的下拉框,用到了很基礎的技術,但是比較實用,喜歡的朋友可以參考下
    2014-09-09
  • js操作table示例(個人心得)

    js操作table示例(個人心得)

    有一個表格,然后有4個輸入框,一個合并按鈕,輸入框是這樣的,從第幾行到第幾行,從第幾列到第幾列,然后點擊按鈕,合并
    2013-11-11
  • 關于promise.all()的使用及說明

    關于promise.all()的使用及說明

    這篇文章主要介紹了關于promise.all()的使用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • 預加載css或javascript的js代碼

    預加載css或javascript的js代碼

    為了提高網站的加載速度,有一個很重要的手段就是在用戶瀏覽過程中的上游網站做一個文件的預加載。
    2010-04-04
  • js實現簡單div拖拽功能實例

    js實現簡單div拖拽功能實例

    這篇文章主要介紹了js實現簡單div拖拽功能的方法,實例分析了javascript針對div層拖拽的實現技巧,需要的朋友可以參考下
    2015-05-05
  • 獲取當前按鈕或者html的ID名稱實例(推薦)

    獲取當前按鈕或者html的ID名稱實例(推薦)

    下面小編就為大家?guī)硪黄@取當前按鈕或者html的ID名稱實例(推薦)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • javascript中的float運算精度實例分析

    javascript中的float運算精度實例分析

    javascript中的float運算精度的一些問題,下面是具體的說明。
    2010-08-08
  • js如何查找json數據中的最大值和最小值方法

    js如何查找json數據中的最大值和最小值方法

    這篇文章主要介紹了js如何查找json數據中的最大值和最小值方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04

最新評論