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的ajax jsonp的使用解惑
Oct 09 Javascript
javascript实现的弹出层背景置灰-模拟(easyui dialog)
Dec 27 Javascript
JavaScript将数据转换成整数的方法
Jan 04 Javascript
jQuery给多个不同元素添加class样式的方法
Mar 26 Javascript
详解AngularJS中的filter过滤器用法
Jan 04 Javascript
Node.js+Express配置入门教程
May 19 Javascript
Dropzone.js实现文件拖拽上传功能(附源码下载)
Nov 22 Javascript
微信小程序 自定义对话框实例详解
Jan 20 Javascript
vue.js中指令Directives详解
Mar 20 Javascript
Javascript之图片的延迟加载的实例详解
Jul 24 Javascript
详解VS Code使用之Vue工程配置format代码格式化
Mar 20 Javascript
微信小程序实现选项卡滑动切换
Oct 22 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
php printf输出格式使用说明
2010/12/05 PHP
php中chdir()函数用法实例
2014/11/13 PHP
php对数组内元素进行随机调换的方法
2015/05/12 PHP
Android AsyncTack 异步任务实例详解
2016/11/02 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
PHP赋值的内部是如何跑的详解
2019/01/13 PHP
js与jquery中获取当前鼠标的x、y坐标位置的代码
2011/05/23 Javascript
文件编码导致jquery失效的解决方法
2013/06/26 Javascript
纯js分页代码(简洁实用)
2013/11/05 Javascript
jQuery实现的fixedMenu下拉菜单效果代码
2015/08/24 Javascript
JavaScript必知必会(九)function 说起 闭包问题
2016/06/08 Javascript
jQuery实现CheckBox全选、全不选功能
2017/01/11 Javascript
JavaScript动态创建二维数组的方法示例
2019/02/01 Javascript
Vue实现开心消消乐游戏算法
2019/10/22 Javascript
KnockoutJS数组比较算法实例详解
2019/11/25 Javascript
vue实现拖拽效果
2019/12/23 Javascript
js实现滚动条自动滚动
2020/12/13 Javascript
Python基于smtplib实现异步发送邮件服务
2015/05/28 Python
Python设计模式之抽象工厂模式原理与用法详解
2019/01/15 Python
django中使用Celery 布式任务队列过程详解
2019/07/29 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
2019/08/15 Python
Python连接Impala实现步骤解析
2020/08/04 Python
马耳他航空公司官方网站:Air Malta
2019/05/15 全球购物
澳大利亚最便宜的网上药房:Chemist Warehouse
2020/01/30 全球购物
西班牙品牌鞋子、服装和配饰在线商店:Esdemarca
2021/02/17 全球购物
应聘教师推荐信
2013/10/31 职场文书
小学教师读书活动总结
2014/07/08 职场文书
单位授权委托书范文
2014/08/02 职场文书
法人授权委托书
2014/09/16 职场文书
办公室领导干部作风整顿个人整改措施
2014/09/17 职场文书
2015年元旦联欢晚会活动总结
2014/11/28 职场文书
团支部书记竞选稿
2015/11/21 职场文书
市语委办2016年第十九届“推普周”活动总结
2016/04/05 职场文书
Nginx反向代理配置的全过程记录
2021/06/22 Servers
MySQL对数据表已有表进行分区表的实现
2021/11/01 MySQL
JS前端使用Canvas快速实现手势解锁特效
2022/09/23 Javascript