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 相关文章推荐
使用jscript实现二进制读写脚本代码
Jun 09 Javascript
csdn 批量接受好友邀请
Feb 19 Javascript
JavaScript小技巧 2.5 则
Sep 12 Javascript
Jquery 点击按钮自动高亮实现原理及代码
Apr 25 Javascript
在jQuery中使用$而避免跟其它库产生冲突的方法
Aug 13 Javascript
boostrapTable的refresh和refreshOptions区别浅析
Jan 22 Javascript
AngularJS 霸道的过滤器小结
Apr 26 Javascript
requirejs按需加载angularjs文件实例
Jun 08 Javascript
jQuery操作DOM_动力节点Java学院整理
Jul 04 jQuery
js禁止浏览器页面后退功能的实例(推荐)
Sep 01 Javascript
Vue v-for循环之@click点击事件获取元素示例
Nov 09 Javascript
jQuery 图片查看器插件 Viewer.js用法简单示例
Apr 04 jQuery
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静态文件生成类实例分析
2015/01/03 PHP
学习YUI.Ext 第二天
2007/03/10 Javascript
5款Javascript颜色选择器
2009/10/25 Javascript
用队列模拟jquery的动画算法实例
2015/01/20 Javascript
使用Chrome浏览器调试AngularJS应用的方法
2015/06/18 Javascript
JS留言功能的简单实现案例(推荐)
2016/06/23 Javascript
Bootstrap零基础学习第一课之模板
2016/07/18 Javascript
Canvas 制作动态进度加载水球详解及实例代码
2016/12/09 Javascript
JavaScript中利用for循环遍历数组
2017/01/15 Javascript
JavaScript手风琴页面制作
2017/05/17 Javascript
js实现鼠标单击Tab表单切换效果
2018/05/16 Javascript
详解Vue+axios+Node+express实现文件上传(用户头像上传)
2018/08/10 Javascript
解决angularJS中input标签的ng-change事件无效问题
2018/09/13 Javascript
javascript实现遮罩层动态效果实例
2019/05/14 Javascript
vue 需求 data中的数据之间的调用操作
2020/08/05 Javascript
google广告之另类js调用实现代码
2020/08/22 Javascript
详解Python的Django框架中的通用视图
2015/05/04 Python
JS设计模式之责任链模式实例详解
2018/02/03 Python
解决Python安装后pip不能用的问题
2018/06/12 Python
Django 开发环境与生产环境的区分详解
2019/07/26 Python
python实现简单井字棋游戏
2020/03/04 Python
jupyter notebook 多行输出实例
2020/04/09 Python
如何基于线程池提升request模块效率
2020/04/18 Python
TensorFlow固化模型的实现操作
2020/05/26 Python
基于 HTML5 WebGL 实现的医疗物流系统
2019/10/08 HTML / CSS
Brookstone美国官网:独特新奇产品
2017/03/04 全球购物
学生操行评语大全
2014/04/24 职场文书
学校就业推荐信范文
2014/05/19 职场文书
政协调研汇报材料
2014/08/15 职场文书
招商引资工作汇报材料
2014/10/28 职场文书
实习生辞职信范文
2015/03/02 职场文书
应届毕业生自荐信
2015/03/04 职场文书
升学宴祝酒词
2015/08/11 职场文书
安全教育培训心得体会
2016/01/15 职场文书
人为什么会“幸灾乐祸”?
2019/08/06 职场文书
SpringBoot Http远程调用的方法
2022/08/14 Java/Android