js實現(xiàn)截圖保存圖片功能的代碼示例
前幾天公司項目里有這樣一個需求,把網(wǎng)頁的某一部分能夠一鍵截圖。這個功能其實就是對人力的一個優(yōu)化,如果是人為做的話,相信大家都知道怎么做(用截圖工具在指定區(qū)域截圖,然后保存到本地,再上傳的服務器上去)。我這個主要就解決這個批量的人力的優(yōu)化。好,廢話不多說了。直接上邏輯和代碼。'
這個問題的解決方案:html to canvas to png. 目前有一個這樣的插件: html2canvas,
html2canvas($targetElem, { useCORS: true, onrendered: function(canvas) { } });
這個'$targetElem'就是那個要轉換的html, useCORS 用來設置圖片是否跨域(如html圖片域名和當前網(wǎng)站不是同一個域名,需要設置這個屬性), onrendered 是轉換完成后執(zhí)行的方法。
里面有一種情況需要考慮:如果html標簽里有svg標簽, 目前htm2canvas不支持svg標簽。
這個情況下就需要先把svg處理成html2canvas能處理標簽。
我這策略是 svg 轉換成 canvas ,html2canvas 轉換完成,再回復svg。這里我還需要這個插件canvg(svg轉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轉換成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); //回復svg nodesToRemove.forEach(function(pair) { pair.parent.removeChild(pair.child); }); nodesToRecover.forEach(function(pair) { pair.parent.appendChild(pair.child); }); })
這個方案,我已經(jīng)完全實現(xiàn)了,并在我們項目里使用了。歡迎大家使用,如果有什么問題,可以留言給我。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
JavaScript 格式化數(shù)字、金額、千分位、保留幾位小數(shù)、舍入舍去
這篇文章主要介紹了JavaScript 格式化數(shù)字、金額、千分位、保留幾位小數(shù)、舍入舍去,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-07-07el-table動態(tài)渲染列、可編輯單元格、虛擬無縫滾動的實現(xiàn)
vue對數(shù)據(jù)處理很常見,本文主要介紹了對el-table組件二次封裝,包括對el-table的動態(tài)渲染、單元格編輯;對于無縫滾動的實現(xiàn),優(yōu)化大數(shù)據(jù)量下的頁面卡頓問題,感興趣的可以了解一下2023-12-12原生JavaScript再網(wǎng)頁實現(xiàn)文本轉語音功能
這篇文章主要為大家詳細介紹了如何通過原生JavaScript再網(wǎng)頁實現(xiàn)文本轉語音功能,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下2025-03-03javascript點擊按鈕實現(xiàn)隱藏顯示切換效果
這篇文章主要介紹了javascript點擊按鈕實現(xiàn)隱藏顯示切換效果,以一個完整的實例為大家分析了js點擊按鈕實現(xiàn)隱藏顯示切換的功能,感興趣的小伙伴們可以參考一下2016-02-02js中eval()函數(shù)和trim()去掉字符串左右空格應用
對于js中eval()函數(shù)的理解和寫一個函數(shù)trim()去掉字符串左右空格;對于js中eval()函數(shù)的理解是本人心得不一定正確,感興趣的朋友參考下,或許對你學習eval()函數(shù)有所幫助2013-02-02JS 實現(xiàn)BASE64_ENCODE和BASE64_DECODE(實例代碼)
JS 實現(xiàn)BASE64_ENCODE和BASE64_DECODE(實例代碼)。需要的朋友可以過來參考下,希望對大家有所幫助2013-11-11