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 jsonp 使用示例代码
Aug 12 Javascript
JavaScript中各种编码解码函数的区别和注意事项
Aug 19 Javascript
MooTools 页面滚动浮动层智能定位实现代码
Aug 23 Javascript
javascript学习笔记(四) Number 数字类型
Jun 19 Javascript
Asp.Net alert弹出提示信息的几种方法总结
Jan 29 Javascript
Javascript实现div的toggle效果实例分析
Jun 09 Javascript
简单谈谈javascript中this的隐式绑定
Feb 22 Javascript
jQuery实现判断上传图片类型和大小的方法示例
Apr 11 jQuery
微信小程序之自定义组件的实现代码(附源码)
Aug 02 Javascript
浅谈vue 单文件探索
Sep 05 Javascript
JavaScript语法约定和程序调试原理解析
Nov 03 Javascript
动态规划之使用备忘录来改进Javascript函数
Apr 07 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 Sql Server连接失败问题及解决办法
2009/08/07 PHP
PHP 文件上传全攻略
2010/04/28 PHP
php代码运行时间查看类代码分享
2011/08/06 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
2013/11/07 PHP
php校验表单检测字段是否为空的方法
2015/03/20 PHP
用PHP代码给图片加水印
2015/07/01 PHP
WordPress中Gravatar头像缓存到本地及相关优化的技巧
2015/12/19 PHP
PHP定时执行任务的3种方法详解
2015/12/21 PHP
PHP解决中文乱码
2017/04/28 PHP
laravel5.5安装jwt-auth 生成token令牌的示例
2019/10/24 PHP
详解阿里云视频直播PHP-SDK接入教程
2020/07/09 PHP
如何简单地用YUI做JavaScript动画
2007/03/10 Javascript
jQuery 表单验证扩展(四)
2010/10/20 Javascript
JQuery datepicker 使用方法
2011/05/20 Javascript
JavaScript中的函数重载深入理解
2014/08/04 Javascript
jQuery中last()方法用法实例
2015/01/06 Javascript
15款jQuery分布引导插件分享
2015/02/04 Javascript
JavaScript+canvas实现七色板效果实例
2016/02/18 Javascript
bootstrap输入框组件使用方法详解
2017/01/19 Javascript
jQuery中的deferred使用方法
2017/03/27 jQuery
JS实现点击拉拽轮播图pc端移动端适配
2018/09/05 Javascript
node.js文件操作系统实例详解
2019/11/05 Javascript
小程序Scroll-view上拉滚动刷新数据
2020/06/21 Javascript
Element Backtop回到顶部的具体使用
2020/07/27 Javascript
python处理csv数据的方法
2015/03/11 Python
在Python的Django框架中显示对象子集的方法
2015/07/21 Python
python实现简单http服务器功能
2018/09/17 Python
win10下安装Anaconda的教程(python环境+jupyter_notebook)
2019/10/23 Python
Python之指数与E记法的区别详解
2019/11/21 Python
Tensorflow训练模型越来越慢的2种解决方案
2020/02/07 Python
python如何变换环境
2020/07/21 Python
英国最大的纸工艺品商店:CraftStash
2018/12/01 全球购物
公务员职业生涯规划书范文  
2014/01/19 职场文书
听课评语大全
2014/04/30 职场文书
地震慰问信
2015/02/14 职场文书
Python数据类型最全知识总结
2021/05/31 Python