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中dom操作和事件的实例学习-表单验证
Nov 30 Javascript
JavaScript表达式:URL 协议介绍
Mar 10 Javascript
jQuery自定义添加"$"与解决"$"冲突的方法
Jan 19 Javascript
JavaScript比较当前时间是否在指定时间段内的方法
Aug 02 Javascript
html+javascript+bootstrap实现层级多选框全层全选和多选功能
Mar 09 Javascript
使用Browserify来实现CommonJS的浏览器加载方法
May 14 Javascript
Bootstrap table学习笔记(2) 前后端分页模糊查询
May 18 Javascript
详解vue.js移动端导航navigationbar的封装
Jul 05 Javascript
浅谈angularJS的$watch失效问题的解决方案
Aug 11 Javascript
基于Vue 2.0 监听文本框内容变化及ref的使用说明介绍
Aug 24 Javascript
基于JS开发微信网页录音功能的实例代码
Apr 30 Javascript
js实现小星星游戏
Mar 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数组函数
2008/08/18 PHP
浅析php中抽象类和接口的概念以及区别
2013/06/27 PHP
CodeIgniter输出中文乱码的两种解决办法
2014/06/12 PHP
PHP strip_tags() 去字符串中的 HTML、XML 以及 PHP 标签的函数
2016/05/22 PHP
Apache+PHP+MySQL搭建PHP开发环境图文教程
2020/08/06 PHP
JAVASCRIPT IE 与 FF中兼容问题小结
2009/02/18 Javascript
jquery 学习之二 属性(html()与html(val))
2010/11/25 Javascript
js中arguments,caller,callee,apply的用法小结
2014/01/28 Javascript
jquery带翻页动画的电子杂志代码分享
2015/08/21 Javascript
iScroll.js 使用方法参考
2016/05/16 Javascript
Jquery Easyui日历组件Calender使用详解(23)
2016/12/18 Javascript
ionic2打包android时gradle无法下载的解决方法
2017/04/05 Javascript
vue2组件之select2调用的示例代码
2017/10/12 Javascript
基于Vuex无法观察到值变化的解决方法
2018/03/01 Javascript
利用vue和element-ui设置表格内容分页的实例
2018/03/02 Javascript
react router4+redux实现路由权限控制的方法
2018/05/03 Javascript
React Native基础入门之调试React Native应用的一小步
2018/07/02 Javascript
Koa代理Http请求的示例代码
2018/10/10 Javascript
JS/jQuery实现简单的开关灯效果【案例】
2019/02/19 jQuery
layUI实现前端分页和后端分页
2019/07/27 Javascript
Bootstrap实现模态框效果
2019/09/30 Javascript
flexible.js实现移动端rem适配方案
2020/04/07 Javascript
javascript中导出与导入实现模块化管理教程
2020/12/03 Javascript
Python多线程和队列操作实例
2015/06/21 Python
Python面向对象之类的封装操作示例
2019/06/08 Python
树莓派与PC端在局域网内运用python实现即时通讯
2019/06/22 Python
python中数据库like模糊查询方式
2020/03/02 Python
python利用paramiko实现交换机巡检的示例
2020/09/22 Python
CSS3 透明色 RGBA使用介绍
2013/08/06 HTML / CSS
劳资协议书范本
2014/04/23 职场文书
幼儿生日活动方案
2014/08/27 职场文书
质量整改报告范文
2014/11/08 职场文书
2014年人民调解工作总结
2014/12/08 职场文书
2015年女工委工作总结
2015/07/27 职场文书
浅谈Nginx 中的两种限流方式
2021/03/31 Servers
React四级菜单的实现
2022/04/08 Javascript