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