Vue中Html2canvas的使用

Html2canvas是什么?

是一個腳本 這個腳本可以允許用戶直接在瀏覽器上拍攝網(wǎng)頁或其中一部分的"屏幕截圖".屏幕截圖是基于DOM,因此可能無法真實表示100%的準確度,因為它無法生成實際的屏幕截圖,而是根據(jù)頁面上的可用信息構(gòu)建屏幕截圖。

運行過程?

腳本遍歷加載頁面的DOM。它收集那里所有元素的信息,然后將其用于構(gòu)建頁面的表示形式。換句話說,它實際上并不截取頁面的屏幕快照,而是根據(jù)它從DOM讀取的屬性來構(gòu)建頁面的表示形式。所以可能有些這個腳本識別不了的css或者html將會在編譯過程中失效!

局限性

腳本使用的所有圖像都必須位于相同的來源, 以便它無需代理即可讀取它們。同樣,如果canvas 頁面上還有其他元素被跨域內(nèi)容污染,它們將變臟并且無法被html2canvas讀取。
該腳本不會呈現(xiàn)Flash或Java applet之類的插件內(nèi)容。

安裝

npm i html2canvas

導入

import html2canvas from html2canvas

用法

html

<button  class="restore-btn"  @click="saveImage('html2canvas', '狗蛋')">生成圖片</button>
<div id="html2canvas" ref="html2canvas">
截取內(nèi)容
</div>

js

//圖片格式轉(zhuǎn)換方法
       dataURLToBlob(dataurl) {
            let arr = dataurl.split(',');
            let mime = arr[0].match(/:(.*?);/)[1];
            let bstr = atob(arr[1]);
            let n = bstr.length;
            let u8arr = new Uint8Array(n);
            while (n--) {
                u8arr[n] = bstr.charCodeAt(n);
            }
            return new Blob([u8arr], { type: mime });
        },
 //點擊方法
       saveImage(divText, imgText) {
            let canvasID = this.$refs[divText];
            let that = this;
            let a = document.createElement('a');
            html2canvas(canvasID).then(canvas => {
                let dom = document.body.appendChild(canvas);
                dom.style.display = 'none';
                a.style.display = 'none';
                document.body.removeChild(dom);
                let blob = that.dataURLToBlob(dom.toDataURL('image/png'));
                a.setAttribute('href', URL.createObjectURL(blob));
                //這塊是保存圖片操作  可以設(shè)置保存的圖片的信息
                a.setAttribute('download', imgText + '.png');
                document.body.appendChild(a);
                a.click();
                URL.revokeObjectURL(blob);
                document.body.removeChild(a);
            });
        },

關(guān)于網(wǎng)絡(luò)圖片截取不了 是因為跨域,上面說過腳本使用的所有圖像都必須位于相同的來源,這里我們只需要給圖片上增加一個屬性crossOrigin="Anonymous",以及對應(yīng)后臺做跨域處理就行了

轉(zhuǎn)載于http://www.itdecent.cn/p/d07f5382b975

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容