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高效反选具体实现
May 05 Javascript
js 用CreateElement动态创建标签示例
Nov 20 Javascript
Js操作DOM元素及获取浏览器高宽的简单方法
Sep 08 Javascript
详解Angular的数据显示优化处理
Dec 26 Javascript
Vue-Router进阶之滚动行为详解
Sep 13 Javascript
Vue.js点击切换按钮改变内容的实例讲解
Aug 22 Javascript
详解Vue-axios 设置请求头问题
Dec 06 Javascript
基于Webpack4和React hooks搭建项目的方法
Feb 05 Javascript
微信小程序常见页面跳转操作简单示例
May 01 Javascript
JavaScript内置对象之Array的使用小结
May 12 Javascript
Vue切换组件实现返回后不重置数据,保留历史设置操作
Jul 21 Javascript
jquery插件实现悬浮的菜单
Apr 24 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表单提交表单名称含有点号(.)则会被转化为下划线(_)
2011/12/14 PHP
PHP面向对象学习笔记之二 生成对象的设计模式
2012/10/06 PHP
PHP读取配置文件类实例(可读取ini,yaml,xml等)
2015/07/28 PHP
jquery ajax应用中iframe自适应高度问题解决方法
2014/04/12 Javascript
Javascript的表单验证-初识正则表达式
2016/03/18 Javascript
Node.js文件操作方法汇总
2016/03/22 Javascript
javascript检查某个元素在数组中的索引值
2016/03/30 Javascript
RequireJS使用注意细节
2016/05/15 Javascript
原生js编写2048小游戏
2017/03/17 Javascript
JS数组搜索之折半搜索实现方法分析
2017/03/27 Javascript
解读vue生成的文件目录结构及说明
2017/11/27 Javascript
原生JS实现的轮播图功能详解
2018/08/06 Javascript
vue实现的树形结构加多选框示例
2019/02/02 Javascript
VUE脚手架的下载和配置步骤详解
2019/04/01 Javascript
Node.JS获取GET,POST数据之queryString模块使用方法详解
2020/02/06 Javascript
JavaScript运行机制实例分析
2020/04/11 Javascript
python 3.6 +pyMysql 操作mysql数据库(实例讲解)
2017/12/20 Python
pycharm实现在子类中添加一个父类没有的属性
2020/03/12 Python
Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作
2020/06/06 Python
python 6行代码制作月历生成器
2020/09/18 Python
用python制作个视频下载器
2021/02/01 Python
突袭HTML5之Javascript API扩展3—本地存储全新体验
2013/01/31 HTML / CSS
南非最大的花卉和送礼服务:NetFlorist
2017/09/13 全球购物
联想德国官网:Lenovo Germany
2018/07/04 全球购物
管理学院毕业生自荐信范文
2014/03/10 职场文书
法律专业自荐信
2014/06/03 职场文书
党委班子对照检查材料
2014/08/19 职场文书
售房协议书范本2014
2014/10/23 职场文书
公安个人四风问题对照检查及整改措施
2014/10/28 职场文书
2014年度思想工作总结
2014/11/27 职场文书
拾金不昧表扬信
2015/01/16 职场文书
培训师岗位职责
2015/02/14 职场文书
医院志愿者活动总结
2015/05/06 职场文书
用Python爬取英雄联盟的皮肤详细示例
2021/12/06 Python
【js设计模式】SOLID五大设计原则
2022/03/24 Javascript
如何通过一篇文章了解Python中的生成器
2022/04/02 Python