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 相关文章推荐
基于JQuery实现的类似购物商城的购物车
Dec 06 Javascript
Moment.js 不容错过的超棒Javascript日期处理类库
Apr 15 Javascript
jQuery父级以及同级元素查找介绍
Sep 04 Javascript
js replace替换所有匹配的字符串
Feb 13 Javascript
javascript实现瀑布流加载图片原理
Feb 02 Javascript
利用vue写todolist单页应用
Dec 15 Javascript
懒加载实现的分页&&网站footer自适应
Dec 21 Javascript
微信小程序 chooseImage选择图片或者拍照
Apr 07 Javascript
vue与TypeScript集成配置最简教程(推荐)
Oct 17 Javascript
vue实现微信分享朋友圈,发送朋友的示例讲解
Feb 10 Javascript
利用Dectorator分模块存储Vuex状态的实现
Feb 05 Javascript
7个好用的JavaScript技巧分享(译)
May 07 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
Laravel手动分页实现方法详解
2016/10/09 PHP
Redis构建分布式锁
2017/03/28 PHP
PHP基于SimpleXML生成和解析xml的方法示例
2017/07/17 PHP
详解PHP中的 input属性(隐藏 只读 限制)
2017/08/14 PHP
Yii2.0框架实现带分页的多条件搜索功能示例
2019/02/20 PHP
用jscript启动sqlserver
2007/06/21 Javascript
读jQuery之十 事件模块概述
2011/06/27 Javascript
javascript Array.prototype.slice的使用示例
2013/11/14 Javascript
javascript中apply和call方法的作用及区别说明
2014/02/14 Javascript
jQuery实现左侧导航模块的显示与隐藏效果
2016/07/04 Javascript
jQuery弹出层插件popShow(改进版)用法示例
2017/01/23 Javascript
深究AngularJS——ng-checked(回写:带真实案例代码)
2017/06/13 Javascript
ReactNative页面跳转Navigator实现的示例代码
2017/08/02 Javascript
Angular2中监听数据更新的方法
2018/08/31 Javascript
layui 图片上传+表单提交+ Spring MVC的实例
2019/09/21 Javascript
[52:02]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第一场 11.27
2020/11/30 DOTA
Python获取网页上图片下载地址的方法
2015/03/11 Python
python字符类型的一些方法小结
2016/05/16 Python
Python中字符串的修改及传参详解
2016/11/30 Python
Python实现的中国剩余定理算法示例
2017/08/05 Python
浅谈Python脚本开头及导包注释自动添加方法
2018/10/27 Python
浅谈python 导入模块和解决文件句柄找不到问题
2018/12/15 Python
Python学习笔记之Zip和Enumerate用法实例分析
2019/08/14 Python
对Python获取屏幕截图的4种方法详解
2019/08/27 Python
阿里健康官方海外旗舰店:阿里健康国际自营
2017/11/24 全球购物
英国曼彻斯特宠物用品品牌:Bunty Pet Products
2019/07/27 全球购物
Diptyque英国官方网站:源自法国的知名香氛品牌
2019/08/28 全球购物
劳动实践课感言
2014/02/01 职场文书
高中生职业生涯规划书
2014/02/24 职场文书
2014年企业员工工作总结
2014/12/09 职场文书
教师工作决心书
2015/02/04 职场文书
2015年车间安全管理工作总结
2015/05/13 职场文书
首次购房证明
2015/06/19 职场文书
公司规章制度范本
2015/08/03 职场文书
《你在为谁工作》心得体会(共8篇)
2016/01/20 职场文书
美德少年事迹材料(2016推荐版)
2016/02/25 职场文书