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)絡圖片截取不了 是因為跨域,上面說過腳本使用的所有圖像都必須位于相同的來源,這里我們只需要給圖片上增加一個屬性crossOrigin="Anonymous"塑径,以及對應后臺做跨域處理就行了

轉(zhuǎn)載于http://www.reibang.com/p/d07f5382b975

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末女坑,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子统舀,更是在濱河造成了極大的恐慌匆骗,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件誉简,死亡現(xiàn)場離奇詭異碉就,居然都是意外死亡,警方通過查閱死者的電腦和手機闷串,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門瓮钥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事碉熄〗拔洌” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵锈津,是天一觀的道長呀酸。 經(jīng)常有香客問我,道長琼梆,這世上最難降的妖魔是什么性誉? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮叮叹,結(jié)果婚禮上艾栋,老公的妹妹穿的比我還像新娘。我一直安慰自己蛉顽,他們只是感情好蝗砾,可當我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著携冤,像睡著了一般悼粮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上曾棕,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天扣猫,我揣著相機與錄音,去河邊找鬼翘地。 笑死申尤,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的衙耕。 我是一名探鬼主播昧穿,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼橙喘!你這毒婦竟也來了时鸵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤厅瞎,失蹤者是張志新(化名)和其女友劉穎饰潜,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體和簸,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡彭雾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了锁保。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片薯酝。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡南誊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蜜托,到底是詐尸還是另有隱情抄囚,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布橄务,位于F島的核電站幔托,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蜂挪。R本人自食惡果不足惜重挑,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望棠涮。 院中可真熱鬧谬哀,春花似錦、人聲如沸严肪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽驳糯。三九已至篇梭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間酝枢,已是汗流浹背恬偷。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留帘睦,地道東北人袍患。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像竣付,于是被迫代替她去往敵國和親诡延。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,675評論 2 359