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 Error的方法
Mar 25 Javascript
JavaScript框架是什么?怎样才能叫做框架?
Jul 01 Javascript
JS+CSS实现鼠标滑过时动态翻滚的导航条效果
Sep 24 Javascript
微信小程序 摇一摇抽奖简单实例实现代码
Jan 09 Javascript
js Canvas绘制圆形时钟教程
Feb 06 Javascript
JS对象创建的几种方式整理
Feb 28 Javascript
轻松实现jQuery添加删除按钮Click事件
Mar 13 Javascript
vue绑定class与行间样式style详解
Aug 16 Javascript
vue2.0 computed 计算list循环后累加值的实例
Mar 07 Javascript
layUI的验证码功能及校验实例
Oct 25 Javascript
JavaScript命令模式原理与用法实例详解
Mar 10 Javascript
vue单应用在ios系统中实现微信分享功能操作
Sep 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
ThinkPHP静态缓存简单配置和使用方法详解
2016/03/23 PHP
PHPStorm+XDebug进行调试图文教程
2016/06/13 PHP
基于php实现的php代码加密解密类完整实例
2016/10/12 PHP
Laravel核心解读之异常处理的实践过程
2019/02/24 PHP
删除重复数据的算法
2006/11/23 Javascript
jquery 获取dom固定元素 添加样式的简单实例
2014/02/04 Javascript
JS实现统计复选框选中个数并提示确定与取消的方法
2015/07/01 Javascript
总结Node.js中的一些错误类型
2016/08/15 Javascript
Asp.Net之JS生成分页条的方法
2016/11/23 Javascript
JavaScript原生编写《飞机大战坦克》游戏完整实例
2017/01/04 Javascript
bootstrap滚动监控器使用方法解析
2017/01/13 Javascript
Vue.js结合bootstrap实现分页控件
2017/03/10 Javascript
Vue 2.0+Vue-router构建一个简单的单页应用(附源码)
2017/03/14 Javascript
详解Vue中过度动画效果应用
2017/05/25 Javascript
JS实现的简单标签点击切换功能示例
2017/09/21 Javascript
vue实现滑动超出指定距离回顶部功能
2019/07/31 Javascript
[01:00:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第三场 1月10日
2021/03/11 DOTA
python爬虫教程之爬取百度贴吧并下载的示例
2014/03/07 Python
python获取mp3文件信息的方法
2015/06/15 Python
Python 基础之字符串string详解及实例
2017/04/01 Python
Python面向对象编程之继承与多态详解
2018/01/16 Python
wxPython实现窗口用图片做背景
2018/04/25 Python
Python多线程原理与用法实例剖析
2019/01/22 Python
Django之PopUp的具体实现方法
2019/08/31 Python
python提取xml里面的链接源码详解
2019/10/15 Python
Python3 assert断言实现原理解析
2020/03/02 Python
python画环形图的方法
2020/03/25 Python
CSS3 Media Queries(响应式布局可以让你定制不同的分辨率和设备)
2013/06/06 HTML / CSS
信用社实习人员自我鉴定
2013/09/20 职场文书
2014大学生全国两会学习心得体会
2014/03/13 职场文书
质量承诺书范文
2014/03/27 职场文书
单位作风建设自查报告
2014/10/23 职场文书
党员先进事迹材料
2014/12/19 职场文书
致我们终将逝去的青春观后感
2015/06/10 职场文书
CSS 实现Chrome标签栏的技巧
2021/08/04 HTML / CSS
Meta增速拉垮,元宇宙难当重任
2022/04/29 数码科技