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 相关文章推荐
小议Function.apply() 之一------(函数的劫持与对象的复制)
Nov 30 Javascript
javascript 浏览器检测代码精简版
Mar 04 Javascript
jquery动态添加删除一行数据示例
Jun 12 Javascript
jQuery实现图像旋转动画效果
May 29 Javascript
javascript正则表达式中分组详解
Jul 17 Javascript
详解vue2 $watch要注意的问题
Sep 08 Javascript
React Native模块之Permissions权限申请的实例相机
Sep 28 Javascript
基于vue和react的spa进行按需加载的实现方法
Sep 29 Javascript
vue如何自动化打包测试环境和正式环境的dist/test文件
Jun 06 Javascript
Vue 自定义标签的src属性不能使用相对路径的解决
Sep 17 Javascript
vue实现侧边栏导航效果
Oct 21 Javascript
从原生JavaScript到React深入理解
Jul 23 Javascript
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
咖啡冲泡指南 咖啡有哪些制作方式 单品咖啡 意式咖啡
2021/03/06 冲泡冲煮
smarty中英文多编码字符截取乱码问题解决方法
2014/10/28 PHP
PHP基于Redis消息队列实现发布微博的方法
2017/05/03 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
jQuery asp.net 用json格式返回自定义对象
2010/04/07 Javascript
JavaScript操作XML 使用百度RSS作为新闻源示例
2012/02/17 Javascript
Javascript实现返回上一页面并刷新的小例子
2013/12/11 Javascript
jquery创建表格(自动增加表格)代码分享
2013/12/25 Javascript
js 动态修改css文件的方法
2014/08/05 Javascript
扒一扒JavaScript 预解释
2015/01/28 Javascript
js实现文字在按钮上滚动的方法
2015/08/20 Javascript
Jquery 分页插件之Jquery Pagination
2015/08/25 Javascript
jQuery Real Person验证码插件防止表单自动提交
2015/11/06 Javascript
jQuery插件之Tocify动态节点目录菜单生成器附源码下载
2016/01/08 Javascript
JavaScript中获取纯正的undefined的方法
2016/03/06 Javascript
JS基于面向对象实现的选项卡效果示例
2016/12/20 Javascript
nodejs 子进程正确的打开方式
2017/07/03 NodeJs
vue侧边栏动态生成下级菜单的方法
2018/09/07 Javascript
封装微信小程序http拦截器过程解析
2019/08/13 Javascript
使用layui实现的左侧菜单栏以及动态操作tab项方法
2019/09/10 Javascript
js实现的在本地预览图片功能示例
2019/11/09 Javascript
[58:15]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 NB vs Liquid
2018/04/02 DOTA
python实现的各种排序算法代码
2013/03/04 Python
Python内置函数之filter map reduce介绍
2014/11/30 Python
python实现用于测试网站访问速率的方法
2015/05/26 Python
Python的装饰器模式与面向切面编程详解
2015/06/21 Python
Python异常处理操作实例详解
2018/05/10 Python
详解多线程Django程序耗尽数据库连接的问题
2018/10/08 Python
CSS3+HTML5+JS 实现一个块的收缩与展开动画效果
2020/11/17 HTML / CSS
CSS3 实现的火焰动画
2020/12/07 HTML / CSS
HTML5中使用json对象的实例代码
2018/09/10 HTML / CSS
求∏的近似值,直到最后一项的绝对值小于指定的数
2016/02/12 面试题
Vector, ArrayList, HashTable, HashMap哪些是线程安全的,哪些不是
2015/10/12 面试题
护士思想汇报
2014/01/12 职场文书
人力资源经理的岗位职责范本
2014/02/28 职场文书
Vue实现下拉加载更多
2021/05/09 Vue.js