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栏目列表隐藏/显示简单实现
Apr 03 Javascript
MyEclipse取消验证Js的两种方法
Nov 14 Javascript
js与css实现弹出层覆盖整个页面的方法
Dec 13 Javascript
jQuery中:disabled选择器用法实例
Jan 04 Javascript
jQuery选择器源码解读(三):tokenize方法
Mar 31 Javascript
浅谈JavaScript的Polymer框架中的事件绑定
Jul 29 Javascript
jquery实现表格中点击相应行变色功能效果【实例代码】
May 09 Javascript
基于jQuery ligerUI实现分页样式
Sep 18 Javascript
ES6中Proxy与Reflect实现重载(overload)的方法
Mar 30 Javascript
vue.js 2.*项目环境搭建、运行、打包发布的详细步骤
May 01 Javascript
Vue使用vue-draggable 插件在不同列表之间拖拽功能
Mar 12 Javascript
原生js实现购物车
Sep 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
PHP初学者头疼问题总结
2006/10/09 PHP
坏狼的PHP学习教程之第2天
2008/06/15 PHP
php下连接mssql2005的代码
2011/01/17 PHP
详解php的魔术方法__get()和__set()使用介绍
2012/09/19 PHP
php.ini 配置文件的深入解析
2013/06/17 PHP
PHP数字和字符串ID互转函数(类似优酷ID)
2014/06/30 PHP
在WordPress的文章编辑器中设置默认内容的方法
2015/12/29 PHP
Laravel中的Auth模块详解
2017/08/17 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例
2019/10/11 PHP
Extjs在exlipse中设置自动提示的方法
2010/04/07 Javascript
在Javascript里访问SharePoint列表数据的实现方法
2011/05/22 Javascript
jQuery UI Autocomplete 体验分享
2012/02/14 Javascript
Ajax清除浏览器js、css、图片缓存的方法
2015/08/06 Javascript
html+js实现简单的计算器代码(加减乘除)
2016/07/12 Javascript
总结javascript中的六种迭代器
2016/08/16 Javascript
微信小程序 progress组件详解及实例代码
2016/10/25 Javascript
jQuery点击弹出层弹出模态框点击模态框消失代码分享
2017/01/21 Javascript
微信小程序 实例开发总结
2017/04/26 Javascript
ES6新特性:使用export和import实现模块化详解
2017/07/31 Javascript
js 判断一个数字是不是2的n次方幂的实例
2017/11/26 Javascript
jQuery封装animate.css的实例
2018/01/04 jQuery
webpack之devtool详解
2018/02/10 Javascript
JS实现倒计时图文效果
2018/11/17 Javascript
JS实现图片拖拽交换效果
2018/11/30 Javascript
基于Node.js的大文件分片上传示例
2019/06/19 Javascript
layui复选框的全选与取消实现方法
2019/09/02 Javascript
javascript浅层克隆、深度克隆对比及实例解析
2020/02/09 Javascript
Python实现基于二叉树存储结构的堆排序算法示例
2017/12/08 Python
Pandas中把dataframe转成array的方法
2018/04/13 Python
python3.6使用urllib完成下载的实例
2018/12/19 Python
keras获得某一层或者某层权重的输出实例
2020/01/24 Python
自荐书模板
2013/12/19 职场文书
仓库主管岗位职责
2014/03/02 职场文书
三好学生演讲稿范文
2014/04/26 职场文书
Debian11 Xfce终端光标的颜色怎么设置?
2022/08/14 数码科技