js实现截图保存图片功能的代码示例


Posted in Javascript onFebruary 16, 2017

前几天公司项目里有这样一个需求,把网页的某一部分能够一键截图。这个功能其实就是对人力的一个优化,如果是人为做的话,相信大家都知道怎么做(用截图工具在指定区域截图,然后保存到本地,再上传的服务器上去)。我这个主要就解决这个批量的人力的优化。好,废话不多说了。直接上逻辑和代码。'

这个问题的解决方案:html to canvas to png. 目前有一个这样的插件: html2canvas,

html2canvas($targetElem, {
     useCORS: true,
     onrendered: function(canvas) {
     }
     });

这个'$targetElem'就是那个要转换的html, useCORS 用来设置图片是否跨域(如html图片域名和当前网站不是同一个域名,需要设置这个属性), onrendered 是转换完成后执行的方法。

里面有一种情况需要考虑:如果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);
      });
   })

这个方案,我已经完全实现了,并在我们项目里使用了。欢迎大家使用,如果有什么问题,可以留言给我。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
索趣科技的答案
Feb 07 Javascript
window.onbeforeunload方法在IE下无法正常工作的解决办法
Jan 23 Javascript
JS左右无缝滚动(一般方法+面向对象方法)
Aug 17 Javascript
JS模拟自动点击的简单实例
Aug 08 Javascript
JS操作JSON要领详细总结
Aug 25 Javascript
SeaJS入门教程系列之完整示例(三)
Mar 03 Javascript
jsMind通过鼠标拖拽的方式调整节点位置
Apr 13 Javascript
jquery实现下拉框功能效果【实例代码】
May 06 Javascript
jQuery Easyui快速入门教程
Aug 21 Javascript
JS中判断null的方法分析
Nov 21 Javascript
解析Javascript单例模式概念与实例
Dec 05 Javascript
详解Vue中$props、$attrs和$listeners的使用方法
Feb 18 Vue.js
javaScript+turn.js实现图书翻页效果实例代码
Feb 16 #Javascript
原生JS实现图片翻书效果
Feb 16 #Javascript
js 单引号替换成双引号,双引号替换成单引号的实现方法
Feb 16 #Javascript
js+html制作简单验证码
Feb 16 #Javascript
Vue 仿百度搜索功能实现代码
Feb 16 #Javascript
javascript实现秒表计时器的制作方法
Feb 16 #Javascript
jQuery实现搜索页面关键字的功能
Feb 16 #Javascript
You might like
PHP获取浏览器信息类和客户端地理位置的2个方法
2014/04/24 PHP
php中json_encode处理gbk与gb2312中文乱码问题的解决方法
2014/07/10 PHP
cakephp常见知识点汇总
2017/02/24 PHP
强悍无比的WEB开发好助手FireBug(Firefox Plugin)
2007/01/16 Javascript
JavaScript语言中的Literal Syntax特性分析
2007/03/08 Javascript
用js实现trim()的解决办法
2013/04/16 Javascript
JavaScript语言对Unicode字符集的支持详解
2014/12/30 Javascript
js对字符的验证方法汇总
2015/02/04 Javascript
jQuery实现伸展与合拢panel的方法
2015/04/30 Javascript
AngularJS使用angular-formly进行表单验证
2015/12/27 Javascript
AngularJS入门教程之AngularJS指令
2016/04/18 Javascript
json的使用小结
2016/06/08 Javascript
15款最好的Bootstrap在线编辑器
2016/08/03 Javascript
Vue.js 点击按钮显示/隐藏内容的实例代码
2018/02/08 Javascript
微信小程序结合Storage实现搜索历史效果
2019/05/18 Javascript
微信小程序实现折线图的示例代码
2019/06/07 Javascript
javascript中的相等操作符(==与===区别)
2019/12/21 Javascript
vue实现选中效果
2020/10/07 Javascript
python jieba分词并统计词频后输出结果到Excel和txt文档方法
2018/02/11 Python
Python切片操作深入详解
2018/07/27 Python
python命令行工具Click快速掌握
2019/07/04 Python
django框架使用方法详解
2019/07/18 Python
python读取dicom图像示例(SimpleITK和dicom包实现)
2020/01/16 Python
Python计算公交发车时间的完整代码
2020/02/12 Python
Python如何使用正则表达式爬取京东商品信息
2020/06/01 Python
python生成xml时规定dtd实例方法
2020/09/21 Python
CSS Grid布局教程之浏览器开启CSS Grid Layout汇总
2014/12/30 HTML / CSS
css3的过滤效果简单实例
2016/08/03 HTML / CSS
前端H5 Video常见使用场景简介
2020/08/21 HTML / CSS
物业门卫岗位职责
2013/12/28 职场文书
房务中心文员岗位职责
2014/04/16 职场文书
颂军魂爱军营演讲稿
2014/09/13 职场文书
布达拉宫导游词
2015/02/02 职场文书
2015年学校减负工作总结
2015/05/19 职场文书
党员学习型组织心得体会
2019/06/21 职场文书
Python几种酷炫的进度条的方式
2022/04/11 Python