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 相关文章推荐
javascript和HTML5利用canvas构建猜牌游戏实现算法
Jul 17 Javascript
apply和call方法定义及apply和call方法的区别
Nov 15 Javascript
Javascript之面向对象--方法
Dec 02 Javascript
Jquery把获取到的input值转换成json
May 15 jQuery
详解如何在Angular中快速定位DOM元素
May 17 Javascript
基于JavaScript实现选项卡效果
Jul 21 Javascript
微信小程序url与token设置详解
Sep 26 Javascript
微信小程序实现顶部导航特效
Jan 28 Javascript
vue实现设置载入动画和初始化页面动画效果
Oct 28 Javascript
vue封装可复用组件confirm,并绑定在vue原型上的示例
Oct 31 Javascript
JS实现轮播图效果
Jan 11 Javascript
解决js中的setInterval清空定时器不管用问题
Nov 17 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 5.3.0 安装分析心得
2009/08/07 PHP
PHP简单实现“相关文章推荐”功能的方法
2014/07/19 PHP
php cookie名使用点号(句号)会被转换
2014/10/23 PHP
PHP获取数组最大值下标的方法
2015/05/12 PHP
一段实时更新的时间代码
2006/07/07 Javascript
jquery 跳到顶部和底部动画2句代码简单实现
2013/07/18 Javascript
jQuery+PHP打造滑动开关效果
2014/12/16 Javascript
不使用ajax实现无刷新提交表单
2014/12/21 Javascript
微信小程序 Audio API详解及实例代码
2016/09/30 Javascript
微信小程序开发之选项卡(窗口底部TabBar)页面切换
2017/04/12 Javascript
详解微信小程序 通过控制CSS实现view隐藏与显示
2017/05/24 Javascript
深入理解React Native原生模块与JS模块通信的几种方式
2017/07/24 Javascript
JS实现手写parseInt的方法示例
2017/09/24 Javascript
微信小程序实现tab左右切换效果
2020/11/15 Javascript
JavaScript实现背景自动切换小案例
2019/09/27 Javascript
Js视频播放器插件Video.js使用方法详解
2020/02/04 Javascript
如何在 ant 的table中实现图片的渲染操作
2020/10/28 Javascript
javascript实现简单留言板案例
2021/02/09 Javascript
树莓派采用socket方式文件传输(python)
2019/06/22 Python
python实现超市管理系统(后台管理)
2019/10/25 Python
Python使用Tkinter实现滚动抽奖器效果
2020/01/06 Python
CSS3实现可关闭的下拉手风琴菜单效果
2015/08/31 HTML / CSS
使用phonegap获取位置信息的实现方法
2017/03/31 HTML / CSS
葡萄牙鞋子品牌:Fair
2016/12/10 全球购物
Europcar英国:英国汽车和货车租赁
2017/01/21 全球购物
La Senza官网:北美顶尖性感内衣品牌
2018/08/03 全球购物
中东奢侈品购物网站:Ounass
2020/09/02 全球购物
平面设计自荐信
2013/10/07 职场文书
新员工入职感言
2014/02/01 职场文书
2014三八妇女节活动总结
2014/03/01 职场文书
三月法制宣传月活动总结
2014/07/03 职场文书
2015年中秋节主持词
2015/07/30 职场文书
高中运动会广播稿
2015/08/19 职场文书
志愿者工作心得体会
2016/01/15 职场文书
祝福语集锦:给百岁老人祝寿贺词
2019/11/19 职场文书
详解CSS不受控制的position fixed
2021/05/25 HTML / CSS