JS实现div模块的截图并下载功能


Posted in Javascript onOctober 17, 2017

当需要实现html页面部分模块截图并具有保存图片功能时,前台直接生成截图并下载会方便的多。多的不说,直接看代码

首先我们需要引入2个js文件:

<script type="text/javascript" src="js/html2canvas.js"></script>
 <script type="text/javascript" src="js/jquery-1.12.3.min.js"></script>

加入css 样式,主要是生成"X"关闭图片图标:

body{background: #ccc}
#dw{position: absolute;top: 10px;left:10%;height: 620px;width:1030px;background: #fff; border:1px solid black;padding: 10px}
.close{
 position:relative;
 left: 10px;
 width:0.2em;
 height:1em;
 background: #333;
 -webkit-transform: rotate(45deg);
 -moz-transform: rotate(45deg);
 -o-transform: rotate(45deg);
 -ms-transform: rotate(45deg);
 transform: rotate(45deg);
 display: inline-block;
}
.close:after{
 content: "";
 position: absolute;
 top: 0;
 left: 0;
 width:0.2em;
 height:1em;
 background: #333;
 -webkit-transform: rotate(270deg);
 -moz-transform: rotate(270deg);
 -o-transform: rotate(270deg);
 -ms-transform: rotate(270deg);
 transform: rotate(270deg);
}

写入随便div 模块,我随便位置给的点击截图按钮

<!-- 要截图的div main 蓝色区域 -->
<div id="main" style="width: 50%; margin-left: 100px;padding: 50px;height: 400px;background: #5a90a0">
<div style="height: 200px;width: 200px;background: #ccc;"></div>

<div style="height: 30px;width: 168px;border:2px solid black;background: red;text-align: center;" onclick="doScreenShot()">截图</div>
</div>
<!-- 生成图片展示的DIV dw-->
<div id="dw" >

<div style="float: right;width: 25px;height: 25px;" title="关闭" onclick="closeok()">


<span class="close"></span>

</div> 
</div>

页面效果如下:

JS实现div模块的截图并下载功能

js代码如下:

$("#dw").hide();
//关闭图片
function closeok(){
 $("#dw").hide();
}
//点击截图
function doScreenShot(){
 $("#dw").show();
 html2canvas($("#main"), {
  onrendered: function(canvas) {
   canvas.id = "mycanvas"; 
   var mainwh=$("#main").width(); 
   var mainhg=$("#main").height();
   var img = convertCanvasToImage(canvas);
   console.log(img);
   //document.body.appendChild(img);
   $("#dw").append(img) //添加到展示图片div区域
   img.onload = function() {
    img.onload = null;
    canvas = convertImageToCanvas(img, 0, 0, 1024, 600); //设置图片大小和位置
    img.src = convertCanvasToImage(canvas).src;
    $(img).css({
     background:"#fff"  
    });
    //调用下载方法 
     if(browserIsIe()){ //假如是ie浏览器    
      DownLoadReportIMG(img.src);
     }else{
      download(img.src)
     }
    }
   }    
 });
} 
//绘制显示图片 
function convertCanvasToImage(canvas) {
 var image = new Image();
 image.src = canvas.toDataURL("image/png"); //获得图片地址
 return image;
}
//生成canvas元素,相当于做了一个装相片的框架
function convertImageToCanvas(image, startX, startY, width, height) {
 var canvas = document.createElement("canvas");
 canvas.width = width;
 canvas.height = height;
 canvas.getContext("2d").drawImage(image, startX, startY, width, height, 20, 20, 960, 600); //在这调整图片中内容的显示(大小,放大缩小,位置等)
 return canvas;
}
 function DownLoadReportIMG(imgPathURL) {
 //如果隐藏IFRAME不存在,则添加
 if (!document.getElementById("IframeReportImg"))
  $('<iframe style="display:none;" id="IframeReportImg" name="IframeReportImg" onload="DoSaveAsIMG();" width="0" height="0" src="about:blank"></iframe>').appendTo("body");
 if (document.all.IframeReportImg.src != imgPathURL) {
  //加载图片
  document.all.IframeReportImg.src = imgPathURL;
 }
 else {
  //图片直接另存为
  DoSaveAsIMG();
 }
}
function DoSaveAsIMG() {
 if (document.all.IframeReportImg.src != "about:blank")
  window.frames["IframeReportImg"].document.execCommand("SaveAs");
}
// 另存为图片
function download(src) {
 var $a = $("<a></a>").attr("href", src).attr("download", "img.png");
 $a[0].click();
}
//判断是否为ie浏览器
function browserIsIe() {
 if (!!window.ActiveXObject || "ActiveXObject" in window)
  return true;
 else
  return false;
}

解释说明:这里核心截图代码是

html2canvas(dom, {  onrendered: function(canvas) {})方法,是插件提供的。其中:dom是你要截图的元素模块

它的作用是把这个参数canvas形成一个img图片元素。调用的是单另的convertCanvasToImage()方法,

其中: image.src = canvas.toDataURL("image/png");这句就是生成图片的地址。而这个图片就是截取的你的那个元素,有了图片地址就很好办了。我只是把它添加到id=“dw”这个元素中提供展示效果。其实做到这样就够了,但我又用canvas装了一遍。

后面给图片加载方法:onload ()在其中添加属性撒的,自动执行下载方法:区分了ie浏览器(网上找的方法),还有我直接生成的下载方法。关于下载方法很多,你们随意选。

当然自己的这个download(src)下载方法同样适用ie。因为原理很简单,就是用生成个元素自己调用方法。

总结

以上所述是小编给大家介绍的S实现div模块的截图并下载功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jQuery的链式调用浅析
Dec 03 Javascript
关于onScroll事件在IE6下每次滚动触发三次bug说明
Sep 21 Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
Sep 01 Javascript
JavaScript lastIndexOf方法入门实例(计算指定字符在字符串中最后一次出现的位置)
Oct 17 Javascript
jquery.gridrotator实现响应式图片展示画廊效果
Jun 23 Javascript
Javascript计算二维数组重复值示例代码
Dec 18 Javascript
前端JS面试中常见的算法问题总结
Dec 23 Javascript
详谈$.data()的用法和作用
Feb 13 Javascript
微信小程序 Nginx环境配置详细介绍
Feb 14 Javascript
基于Datatables跳转到指定页的简单实例
Nov 09 Javascript
js使用Promise实现简单的Ajax缓存
Nov 14 Javascript
教你一步步实现一个简易promise
Nov 02 Javascript
bootstrap模态框嵌套、tabindex属性、去除阴影的示例代码
Oct 17 #Javascript
AngularJS 控制器 controller的详解
Oct 17 #Javascript
VUE前端cookie简单操作
Oct 17 #Javascript
javascript 判断用户有没有操作页面
Oct 17 #Javascript
vue-router 路由基础的详解
Oct 17 #Javascript
如何抽象一个Vue公共组件
Oct 17 #Javascript
vue实现图书管理demo详解
Oct 17 #Javascript
You might like
《星际争霸》各版本雷兽特点图文解析 雷兽不同形态一览
2020/03/02 星际争霸
Cakephp 执行主要流程
2010/03/24 PHP
phpmyadmin提示The mbstring extension is missing的解决方法
2014/12/17 PHP
joomla实现注册用户添加新字段的方法
2016/05/05 PHP
PHP与Java对比学习日期时间函数
2016/07/03 PHP
PHP面向对象中new self()与 new static()的区别浅析
2017/08/17 PHP
javascript parseInt与Number函数的区别
2010/01/21 Javascript
JavaScript中各种编码解码函数的区别和注意事项
2010/08/19 Javascript
每天一篇javascript学习小结(Date对象)
2015/11/13 Javascript
jquery判断输入密码两次是否相等
2020/04/22 Javascript
bootstrap使用validate实现简单校验功能
2016/12/02 Javascript
深入理解AngularJS中的ng-bind-html指令
2017/03/27 Javascript
jQuery DOM节点的遍历方法小结
2017/08/15 jQuery
Vue.js项目模板搭建图文教程
2017/09/20 Javascript
Vue中使用webpack别名的方法实例详解
2018/06/19 Javascript
sharp.js安装过程中遇到的问题总结
2020/04/02 Javascript
python使用htmllib分析网页内容的方法
2015/05/08 Python
python初学之用户登录的实现过程(实例讲解)
2017/12/23 Python
python SSH模块登录,远程机执行shell命令实例解析
2018/01/12 Python
Python PyQt4实现QQ抽屉效果
2018/04/20 Python
Python实现图片拼接的代码
2018/07/02 Python
Python 文件数据读写的具体实现
2020/01/24 Python
Python startswith()和endswith() 方法原理解析
2020/04/28 Python
python元组拆包实现方法
2021/02/28 Python
汉森冲浪板:Hansen Surfboards
2018/05/19 全球购物
控制工程专业个人求职信
2013/09/25 职场文书
销售高级职员求职信
2013/10/29 职场文书
汽车维修工岗位职责
2014/02/12 职场文书
会议主持词
2014/03/17 职场文书
党的群众路线教育实践活动整改落实情况自查报告
2014/10/28 职场文书
初中作文评语
2014/12/25 职场文书
挂职锻炼个人总结
2015/03/05 职场文书
2015年学习部工作总结范文
2015/03/31 职场文书
Pytest allure 命令行参数的使用
2021/04/18 Python
LayUI+Shiro实现动态菜单并记住菜单收展的示例
2021/05/06 Javascript
Python之matplotlib绘制饼图
2022/04/13 Python