摘要:前幾天公司項目里有這樣一個需求,把網(wǎng)頁的某一部分能夠一鍵截圖。這個功能其實就是對人力的一個優(yōu)化,如果是人為做的話,相信大家都知道怎么做用截圖工具在指定區(qū)域截圖,然后保存到本地,再上傳的服務(wù)器上去。
前幾天公司項目里有這樣一個需求,把網(wǎng)頁的某一部分能夠一鍵截圖。這個功能其實就是對人力的一個優(yōu)化,如果是人為做的話,相信大家都知道怎么做(用截圖工具在指定區(qū)域截圖,然后保存到本地,再上傳的服務(wù)器上去)。我這個主要就解決這個批量的人力的優(yōu)化。好,廢話不多說了。直接上邏輯和代碼。"
這個問題的解決方案:html to canvas to png.
目前有一個這樣的插件: html2canvas,
html2canvas($targetElem, { useCORS: true, onrendered: function(canvas) { } });
這個"$targetElem"就是那個要轉(zhuǎn)換的html, useCORS 用來設(shè)置圖片是否跨域(如html圖片域名和當(dāng)前網(wǎng)站不是同一個域名,需要設(shè)置這個屬性), onrendered 是轉(zhuǎn)換完成后執(zhí)行的方法。
里面有一種情況需要考慮:如果html標(biāo)簽里有svg標(biāo)簽, 目前htm2canvas不支持svg標(biāo)簽。
這個情況下就需要先把svg處理成html2canvas能處理標(biāo)簽。
我這策略是 svg 轉(zhuǎn)換成 canvas ,html2canvas 轉(zhuǎn)換完成,再回復(fù)svg。這里我還需要這個插件canvg(svg轉(zhuǎn)canvas)
具體代碼如下
var nodesToRecover = []; var nodesToRemove = []; var $svgElem = $targetElem.find("svg"); $svgElem.each(function(index, node) { var parentNode = node.parentNode; var canvas = document.createElement("canvas"); canvg(canvas, parentNode, {ignoreMouse: true, ignoreAnimation: true}); //將svg轉(zhuǎn)換成canvas nodesToRecover.push({ parent: parentNode, child: node }); parentNode.removeChild(node); nodesToRemove.push({ parent: parentNode, child: canvas }); parentNode.appendChild(canvas); }); html2canvas($targetElem, { useCORS: true, onrendered: function(canvas) { var base64Image = canvas.toDataURL("image/png").substring(22); //回復(fù)svg nodesToRemove.forEach(function(pair) { pair.parent.removeChild(pair.child); }); nodesToRecover.forEach(function(pair) { pair.parent.appendChild(pair.child); }); })
這個方案,我已經(jīng)完全實現(xiàn)了,并在我們項目里使用了。 歡迎大家使用,如果有什么問題,可以留言給我。
最后希望大家如果覺得好,給個推薦。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/50403.html
摘要:目前已經(jīng)在運行的線上前端監(jiān)控系統(tǒng)代碼和講解都放在這篇文章里監(jiān)控系統(tǒng)介紹及代碼用戶對前端程序員來說,就是一個黑匣子。 摘要: 通過錄屏或者截圖,快速復(fù)現(xiàn)BUG場景。 作者:一步一個腳印一個坑 原文:搭建前端監(jiān)控系統(tǒng)(備選)Js截圖上報篇 Fundebug經(jīng)授權(quán)轉(zhuǎn)載,版權(quán)歸原作者所有。 PS:本文關(guān)于Fundebug錄屏功能的內(nèi)容有些不準(zhǔn)確的地方,比如錄屏并非通過截圖實現(xiàn)的,錄屏插件...
摘要:這個功能在我的瀏覽器和谷歌瀏覽器時可以實現(xiàn)功能的。但是發(fā)現(xiàn)華為自帶的瀏覽器不支持。 [1]我要實現(xiàn)的功能是用戶填寫完表單后,點擊提交按鈕,截圖。截圖放在一個彈層里面,給一句提示長按圖片保存至手機。 showImg(https://segmentfault.com/img/bVbtFCW?w=324&h=578); js引入的是bluebird.min.js和html2canvas.js...
摘要:這個功能在我的瀏覽器和谷歌瀏覽器時可以實現(xiàn)功能的。但是發(fā)現(xiàn)華為自帶的瀏覽器不支持。 [1]我要實現(xiàn)的功能是用戶填寫完表單后,點擊提交按鈕,截圖。截圖放在一個彈層里面,給一句提示長按圖片保存至手機。 showImg(https://segmentfault.com/img/bVbtFCW?w=324&h=578); js引入的是bluebird.min.js和html2canvas.js...
摘要:前幾天公司項目里有這樣一個需求,把網(wǎng)頁的某一部分能夠一鍵截圖。這個功能其實就是對人力的一個優(yōu)化,如果是人為做的話,相信大家都知道怎么做用截圖工具在指定區(qū)域截圖,然后保存到本地,再上傳的服務(wù)器上去。 前幾天公司項目里有這樣一個需求,把網(wǎng)頁的某一部分能夠一鍵截圖。這個功能其實就是對人力的一個優(yōu)化,如果是人為做的話,相信大家都知道怎么做(用截圖工具在指定區(qū)域截圖,然后保存到本地,再上傳的服務(wù)...
在vue項目中canvas實現(xiàn)截圖功能是常用的,下面是具體代碼: 實現(xiàn)效果: 在vue項目中做的一個截圖功能(只能夠截取圖片),只用鼠標(biāo)就可以在畫面中進行框選截取。 實現(xiàn):做一個彈窗,打開彈窗的時候傳入要截的圖,接下來在這個窗口里面,點擊截圖按鈕,開始截圖;點擊取消按鈕,取消截圖。 窗口里面的html主要是三個部分,一個是可截圖區(qū)域,一個是截取圖片的回顯,一個是操作按鈕(截圖按鈕和取消...
閱讀 3502·2019-08-30 15:53
閱讀 3414·2019-08-29 16:54
閱讀 2203·2019-08-29 16:41
閱讀 2413·2019-08-23 16:10
閱讀 3384·2019-08-23 15:04
閱讀 1355·2019-08-23 13:58
閱讀 355·2019-08-23 11:40
閱讀 2459·2019-08-23 10:26