1. 程式人生 > >【解決】html2canvas.js截圖只擷取當前可視區域

【解決】html2canvas.js截圖只擷取當前可視區域

只是一個簡單的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或者使用代理。