優缺點分析:
(1)、利用DOM改寫爲canvas的方式:至關於徹底重寫了整個頁面的佈局樣式,增長了工做量。 因爲canvas中沒有的對象概念,對於元素豐富、佈局複雜的頁面,不易重構。 全部DOM元素改寫進canvas會帶來一些困難。例如:難以支持響應式。
(2)、利用HtmlCanvas的方式:只需簡單調用html2canvas方法並設定配置項便可。腳本使用的全部圖像須要駐留在同一個源下,若是頁面上有其餘畫布元素,這些元素已經被跨源內容污染,再也不能被html2canvas讀取。
(3)、使用rasterizeHTML.js實現:限制較多,目前僅支持3類可轉爲canvas的目標格式: 頁面url,html字符串和document對象。html
腳本容許你直接在用戶瀏覽器上獲取網頁的截圖或部份內容。屏幕截圖是基於DOM的,所以對於真實的表示來講,它可能不是100%準確的,由於它不作實際的屏幕截圖,而是基於頁面上可用的信息構建屏幕截圖。它實際上並不獲取頁面的屏幕截圖,而是基於從DOM讀取的屬性構建頁面的表示。所以,它只能正確地描述它所理解的屬性,這意味着有許多CSS屬性不起做用。npm
安裝 npm install html2canvas
引入 import html2canvas from ‘html2canvas’;
canvas
名稱 | 默認 | 描述 |
---|---|---|
async | true | 是否異步解析和呈現元素 |
allowTaint | false | 是否容許跨原始圖像污染畫布 |
backgroundColor | #ffffff | 畫布背景顏色,若是在DOM中未指定,設置 null 爲透明 |
canvas | null | 現有畫布元素用做繪圖的基礎 |
foreignObjectRendering | false | 是否在瀏覽器支持的狀況下使用ForeignObject渲染持 |
imageTimeout | 15000 | 加載圖像的超時(以毫秒爲單位,設置 0 爲禁用超時 |
ignoreElements | (element)=>false | 謂詞函數,用於從渲染中刪除匹配元素 |
logging | true | 啓用日誌記錄以進行調試 |
onclone | 在克隆文檔進行渲染時調用的回調函數可用於修改將在不影響原始源文檔的狀況下呈現的內容。 | |
proxy | null | Url到 代理 ,用於加載跨源圖像。若是留空,則不會加載跨原始圖像。 |
removeContainer | true | 是否要清理克隆的DOM元素html2canvas會暫時建立 |
scale | window.devicePixelRatio | 用於渲染的比例,默認爲瀏覽器設備像素比率 |
useCORS | false | 用來設置是否容許使用跨域的圖片進行訪問 |
width | element width | canvas的寬度 |
height | element height | canvas高度設定 |
x | element x-offset | 裁剪畫布x座標 |
y | element y-offset | 裁剪畫布y座標 |
scrollX | element scrollX | 渲染元素時使用的x滾動位置(例如,若是Element使用 position: fixed ) |
scrollY | element scrollY | 渲染元素時使用的y滾動位置(例如,若是Element使用 position: fixed ) |
windowWidth | Window.innerWidth | 渲染元素時使用的窗口寬度,這可能會影響媒體查詢之類的東西 |
windowHeight | Window.innerHeght | 染時使用的窗口高度 Element ,這可能會影響媒體查詢等內容 |
taintTest | true | 在渲染前測試圖片 |
html2canvas(document.body).then(function(canvas) { document.body.appendChild(canvas); });
<canvas width="320" height="180" style="width:160px;height:90px;"></canvas>
.targetElem {width: 54px;height: 142px;margin-top:2px;margin-left:17px;transform: scale(0.5)}