【解決】html2canvas.js截圖只擷取當前可視區域
阿新 • • 發佈:2019-02-09
只是一個簡單的demo示例,包含圖片和文字,然後最近需求則是大範圍的文字和ajax動態獲取的巢狀資料。
版本:html2canvas 0.4.1.
原頁面程式碼非常複雜,無法完全還原始碼。頁面程式碼中涉及到了iframe、easyUI,tab標籤
原因:當時使用tab標籤分類顯示的時候,當前選中模組顯示內容,未選中模組內容設定為隱藏狀態。而html2canvas外掛無法識別隱藏的dom元素。
思路:找到需要生成截圖的dom節點,在頁面渲染完成之後,克隆一份備份節點,追加在body後面,這份備份的節點不能是隱藏狀態,設定備份節點的絕對定位和圖層級別。
注:因為是ajax動態載入資料,所以不能在頁面載入的時候就執行克隆複製節點,最好是設定一個按鈕觸發。
$("#downpdf").on("click", function() {
//獲取節點高度,後面為克隆節點設定高度。
var height = $(TargetNode).height()
//克隆節點,預設為false,不復制方法屬性,為true是全部複製。
var cloneDom = $(TargetNode).clone(true);
//設定克隆節點的css屬性,因為之前的層級為0,我們只需要比被克隆的節點層級低即可。
cloneDom.css({
"background-color" : "white",
"position": "absolute",
"top": "0px",
"z-index": "-1",
"height": height
});
//將克隆節點動態追加到body後面。
$("body").append(cloneDom);
//外掛生成base64img圖片。
html2canvas(cloneDom, {
//Whether to allow cross-origin images to taint the canvas
allowTaint: true,
//Whether to test each image if it taints the canvas before drawing them
taintTest: false,
onrendered: function(canvas) {
var img = canvas.toDataURL('image/jpeg', 1.0);
//打印出來之後:data:image/jpeg;base64,/9j/4AAQSkZJRg....
//可以通過chrome來檢視
console.log(img);
}
});
});
注:如果出現跨域問題,嘗試修改一下header或者使用代理。