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 相关文章推荐
select 控制网页内容隐藏于显示的实现代码
May 25 Javascript
JavaScript高级程序设计(第3版)学习笔记3 js简单数据类型
Oct 11 Javascript
Javascript表单验证要注意的事项
Sep 29 Javascript
JS动态显示表格上下frame的方法
Mar 31 Javascript
AngularJS基础 ng-submit 指令简单示例
Aug 03 Javascript
微信小程序学习(4)-系统配置app.json详解
Jan 12 Javascript
微信小程序开发之入门实例教程篇
Mar 07 Javascript
详解webpack分离css单独打包
Jun 21 Javascript
JavaScript 基础表单验证示例(纯Js实现)
Jul 20 Javascript
解决iview多表头动态更改列元素发生的错误的方法
Nov 02 Javascript
vue引入微信sdk 实现分享朋友圈获取地理位置功能
Jul 04 Javascript
小程序实现文字循环滚动动画
Jun 14 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
php5中date()得出的时间为什么不是当前时间的解决方法
2008/06/30 PHP
Linux下将excel数据导入到mssql数据库中的方法
2010/02/08 PHP
从零开始学YII2框架(四)扩展插件yii2-kartikgii
2014/08/20 PHP
php简单实现多语言切换的方法
2016/05/09 PHP
PHP实现对数组分页处理实例详解
2017/02/07 PHP
一种JavaScript的设计模式
2006/11/22 Javascript
最近项目写了一些js,水平有待提高
2009/01/31 Javascript
google地图的路线实现代码
2009/08/20 Javascript
Mootools 1.2教程 排序类和方法简介
2009/09/15 Javascript
jquery简单的拖动效果实现原理及示例
2013/07/26 Javascript
jquery选择器使用详解
2014/04/08 Javascript
自己使用js/jquery写的一个定制对话框控件
2014/05/02 Javascript
浅谈javascript中call()、apply()、bind()的用法
2015/04/20 Javascript
javascript实现十秒钟后注册按钮可点击的方法
2015/05/13 Javascript
jquery实现点击查看更多内容控制段落文字展开折叠效果
2015/08/06 Javascript
bootstrap动态添加面包屑(breadcrumb)及其响应事件的方法
2017/05/25 Javascript
十分钟带你快速了解React16新特性
2017/11/10 Javascript
Less 安装及基本用法
2018/05/05 Javascript
vue.js 图片上传并预览及图片更换功能的实现代码
2018/08/27 Javascript
Vue面试题及Vue知识点整理
2018/10/07 Javascript
vue实现移动端图片上传功能
2019/12/23 Javascript
Vue中 axios delete请求参数操作
2020/08/25 Javascript
[19:14]DOTA2 HEROS教学视频教你分分钟做大人-维萨吉
2014/06/24 DOTA
python将人民币转换大写的脚本代码
2013/02/10 Python
windows下安装Python和pip终极图文教程
2017/03/05 Python
Python设计模式之工厂模式简单示例
2018/01/09 Python
Python调用钉钉自定义机器人的实现
2020/01/03 Python
canvas粒子动画背景的实现示例
2018/09/03 HTML / CSS
工程业务员工作职责
2013/12/07 职场文书
教师演讲稿范文
2014/01/08 职场文书
求职信标题怎么写
2014/05/26 职场文书
幼儿园教师的自我评价范文
2014/09/17 职场文书
机关领导干部作风整顿整改措施
2014/09/19 职场文书
2014县委书记四风对照检查材料思想汇报
2014/09/21 职场文书
2015廉洁自律个人总结
2015/02/14 职场文书
《雪地里的小画家》教学反思
2016/02/16 职场文书