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 相关文章推荐
Javascript 继承机制的实现
Aug 12 Javascript
通过javascript的匿名函数来分析几段简单有趣的代码
Jun 29 Javascript
用js实现in_array的方法
Nov 05 Javascript
自己动手手写jQuery插件总结
Jan 20 Javascript
jQuery实现仿百度首页滑动伸缩展开的添加服务效果代码
Sep 09 Javascript
很棒的js Tab选项卡切换效果
Aug 30 Javascript
Bootstrap基本组件学习笔记之按钮组(8)
Dec 07 Javascript
Vue服务端渲染和Vue浏览器端渲染的性能对比(实例PK )
Mar 31 Javascript
Angular2下使用pdf插件的方法详解
Apr 29 Javascript
vue 弹框产生的滚动穿透问题的解决
Sep 21 Javascript
jquery获取input输入框中的值
Nov 13 jQuery
vue fetch中的.then()的正确使用方法
Apr 17 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
微信营销平台系统?刮刮乐的开发
2014/06/10 PHP
基于laravel制作APP接口(API)
2016/03/15 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
Laravel框架路由管理简单示例
2019/05/07 PHP
JavaScript 组件之旅(三):用 Ant 构建组件
2009/10/28 Javascript
firefox下对ajax的onreadystatechange的支持情况分析
2009/12/14 Javascript
jQuery 动态酷效果实现总结
2009/12/27 Javascript
EXTJS FORM HIDDEN TEXTFIELD 赋值 使用value不好用的问题
2011/04/16 Javascript
再谈javascript面向对象编程
2012/03/18 Javascript
jQuery常见开发技巧详细整理
2013/01/02 Javascript
一个网页标题title的闪动提示效果实现思路
2014/03/22 Javascript
jQuery 获取/设置/删除DOM元素的属性以a元素为例
2014/05/23 Javascript
node爬取微博的数据的简单封装库nodeweibo使用指南
2015/01/02 Javascript
javascript实现checkBox的全选,反选与赋值
2015/03/12 Javascript
NodeJS与HTML5相结合实现拖拽多个文件上传到服务器的实现方法
2016/07/26 NodeJs
详解JavaScript数组过滤相同元素的5种方法
2017/05/23 Javascript
nodejs动态创建二维码的方法
2017/08/12 NodeJs
JS实现静态页面搜索并高亮显示功能完整示例
2017/09/19 Javascript
vue移动端实现红包雨效果
2020/06/23 Javascript
js计算最大公约数和最小公倍数代码实例
2019/09/11 Javascript
vue 组件内获取actions的response方式
2019/11/08 Javascript
vue 导出文件,携带请求头token操作
2020/09/10 Javascript
在Windows8上的搭建Python和Django环境
2014/07/03 Python
浅谈Python_Openpyxl使用(最全总结)
2019/09/05 Python
python使用 request 发送表单数据操作示例
2019/09/25 Python
python圣诞树编写实例详解
2020/02/13 Python
Alba Moda德国网上商店:意大利时尚女装销售
2016/11/14 全球购物
捷克电器和DJ设备网上商店:Electronic-star
2017/07/18 全球购物
英国布鲁姆精品店:Bloom Boutique
2018/03/01 全球购物
美国五金商店:Ace Hardware
2018/03/27 全球购物
教师岗位聘任书范文
2014/03/29 职场文书
工商管理专业毕业生求职信
2014/05/26 职场文书
超市店庆活动方案
2014/08/31 职场文书
国庆节标语大全
2014/10/08 职场文书
死者家属慰问信
2015/03/24 职场文书
python实现简单反弹球游戏
2021/04/12 Python