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小技巧--自动隐藏红叉叉
Aug 13 Javascript
Extjs3.0 checkboxGroup 动态添加item实现思路
Aug 14 Javascript
Js判断参数(String,Array,Object)是否为undefined或者值为空
Nov 04 Javascript
JavaScript插件化开发教程(六)
Feb 01 Javascript
JS hashMap实例详解
May 26 Javascript
浅谈JavaScript中变量和函数声明的提升
Aug 09 Javascript
纯JS实现弹性导航条效果
Mar 06 Javascript
使用vue官方提供的模板vue-cli搭建一个helloWorld案例分析
Jan 16 Javascript
使用vue实现各类弹出框组件
Jul 03 Javascript
Vue实现可移动水平时间轴
Jun 29 Javascript
vue实现图书管理系统
Dec 29 Vue.js
react antd实现动态增减表单
Jun 03 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程序的方法
2015/06/13 PHP
Yii2框架dropDownList下拉菜单用法实例分析
2016/07/18 PHP
PHP 文件锁与进程锁的使用示例
2017/08/07 PHP
浏览器脚本兼容 文本框中,回车键触发事件的兼容
2010/06/21 Javascript
新鲜出炉的js tips提示效果
2011/04/03 Javascript
jquery实现省市select下拉框的替换(示例代码)
2014/02/22 Javascript
简介JavaScript中的setTime()方法的使用
2015/06/11 Javascript
JS限制条件补全问题实例分析
2016/12/16 Javascript
ES6实现的遍历目录函数示例
2017/04/07 Javascript
微信小程序商城项目之商品属性分类(4)
2017/04/17 Javascript
ReactNative中使用Redux架构总结
2017/12/15 Javascript
webpack写jquery插件的环境配置
2017/12/21 jQuery
JavaScript读写二进制数据的方法详解
2018/09/09 Javascript
vue滚动插件better-scroll使用详解
2019/10/18 Javascript
vue浏览器返回监听的具体步骤
2021/02/03 Vue.js
原生js 实现表单验证功能
2021/02/08 Javascript
[57:28]2018DOTA2亚洲邀请赛 4.6 淘汰赛 TNC vs Liquid 第一场
2018/04/10 DOTA
python基础教程之元组操作使用详解
2014/03/25 Python
python实现稀疏矩阵示例代码
2017/06/09 Python
python 换位密码算法的实例详解
2017/07/19 Python
对Python中创建进程的两种方式以及进程池详解
2019/01/14 Python
使用Django开发简单接口实现文章增删改查
2019/05/09 Python
python3 写一个WAV音频文件播放器的代码
2019/09/27 Python
python opencv 实现对图像边缘扩充
2020/01/19 Python
基于SpringBoot构造器注入循环依赖及解决方式
2020/04/26 Python
通过案例解析python鸭子类型相关原理
2020/10/10 Python
阿玛瑞酒店中文官方网站:Amari.com
2018/02/13 全球购物
校友会欢迎辞
2014/01/13 职场文书
创业资金计划书
2014/02/06 职场文书
葛优非诚勿扰搞笑征婚台词
2014/03/17 职场文书
项目经理岗位职责范本
2015/04/01 职场文书
签订劳动合同通知书
2015/04/16 职场文书
2016党员干部政治学习心得体会
2016/01/23 职场文书
Mysql官方性能测试工具mysqlslap的使用简介
2021/05/21 MySQL
在Docker容器中部署SQL Server
2022/04/11 Servers
python中pd.cut()与pd.qcut()的对比及示例
2022/06/16 Python