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 相关文章推荐
用js实现的页面关键字密度查询代码
Dec 27 Javascript
appendChild() 或 insertBefore()使用与区别介绍
Oct 11 Javascript
js与jquery获取父元素,删除子元素的两种不同方法
Jan 09 Javascript
JS验证IP,子网掩码,网关和MAC的方法
Jul 02 Javascript
基于Jquery实现表单验证
Jul 20 Javascript
原生js实现移动端瀑布流式代码示例
Dec 18 Javascript
微信小程序 框架详解及实例应用
Sep 26 Javascript
JS实现禁止高频率连续点击的方法【基于ES6语法】
Apr 25 Javascript
seajs下require书写约定实例分析
May 16 Javascript
使用js实现将后台传入的json数据放在前台显示
Aug 06 Javascript
vue cli使用融云实现聊天功能的实例代码
Apr 19 Javascript
微信小程序如何连接Java后台
Aug 08 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安装为Apache DSO
2006/10/09 PHP
php下判断数组中是否存在相同的值array_unique
2008/03/25 PHP
php实现文件下载更能介绍
2012/11/23 PHP
PHP通过内置函数memory_get_usage()获取内存使用情况
2014/11/20 PHP
php操作MongoDB类实例
2015/06/17 PHP
关于WordPress的SEO优化相关的一些PHP页面脚本技巧
2015/12/10 PHP
PHP与服务器文件系统的简单交互
2016/10/21 PHP
Linux基于php-fpm模式的lamp搭建phpmyadmin的方法
2018/10/25 PHP
才发现的超链接js导致网页中GIF动画停止的解决方法
2007/11/02 Javascript
javascript concat数组累加 示例
2009/09/03 Javascript
extjs 为某个事件设置拦截器
2010/01/15 Javascript
js二级地域选择的实现方法
2013/06/17 Javascript
简单谈谈JavaScript的同步与异步
2015/12/31 Javascript
Javascript农历与公历相互转换的简单实例
2016/10/09 Javascript
AngularJS实现动态编译添加到dom中的方法
2016/11/04 Javascript
javascript实现滑动解锁功能
2017/03/22 Javascript
javascript实现二叉树遍历的代码
2017/06/08 Javascript
Vue中计算属性computed的示例解读
2017/07/26 Javascript
浅谈Node Inspector 代理实现
2017/10/19 Javascript
angular写一个列表的选择全选交互组件的示例
2018/01/22 Javascript
vue 点击展开显示更多(点击收起部分隐藏)
2019/04/09 Javascript
vue 中几种传值方法(3种)
2019/11/12 Javascript
Vue使用Three.js加载glTF模型的方法详解
2020/06/14 Javascript
python实现猜数字游戏(无重复数字)示例分享
2014/03/29 Python
使用Python编写vim插件的简单示例
2015/04/17 Python
python3使用scrapy生成csv文件代码示例
2017/12/28 Python
Python实现的求解最大公约数算法示例
2018/05/03 Python
解决csv.writer写入文件有多余的空行问题
2018/07/06 Python
matplotlib.pyplot绘图显示控制方法
2019/01/15 Python
对pyqt5多线程正确的开启姿势详解
2019/06/14 Python
pytorch 求网络模型参数实例
2019/12/30 Python
CSS3 简单又实用的5个属性
2010/03/04 HTML / CSS
大学生档案自我鉴定(2篇)
2014/10/14 职场文书
婚礼女方父母答谢词
2015/01/04 职场文书
学校后勤工作总结2015
2015/05/15 职场文书
python基础之类方法和静态方法
2021/10/24 Python