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 可排列的表实现代码
Nov 13 Javascript
Javascript load Page,load css,load js实现代码
Mar 31 Javascript
jQuery编写widget的一些技巧分享
Oct 28 Javascript
js对象与打印对象分析比较
Apr 23 Javascript
HTML页面登录时的JS验证方法
May 28 Javascript
点击表单提交时出现jQuery没有权限的解决方法
Jul 23 Javascript
javascript删除一个html元素节点的方法
Dec 20 Javascript
深入浅析JS是按值传递还是按引用传递(推荐)
Sep 18 Javascript
bootstrapValidator表单验证插件学习
Dec 30 Javascript
Bootstrap实现可折叠分组侧边导航菜单
Mar 07 Javascript
vue组件横向树实现代码
Aug 02 Javascript
Vue中引入svg图标的两种方式
Jan 14 Vue.js
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
PHP4中session登录页面的应用
2008/07/25 PHP
新浪SAE搭建PHP项目教程
2015/01/28 PHP
PHP+Ajax实现验证码的实时验证
2016/07/20 PHP
php处理静态页面:页面设置缓存时间实例
2017/06/22 PHP
jquery对表单操作2
2011/04/06 Javascript
页面回到顶部的三种实现(锚标记,js)
2012/10/01 Javascript
javascript实现文字图片上下滚动的具体实例
2013/06/28 Javascript
innerHTML中标签可以换行的方法汇总
2015/08/14 Javascript
Bootstrap与KnockoutJs相结合实现分页效果实例详解
2016/05/03 Javascript
浅谈JavaScript中小数和大整数的精度丢失
2016/05/31 Javascript
jQuery实现删除li节点的方法
2016/12/06 Javascript
angular4笔记系列之内置指令小结
2018/11/09 Javascript
Vue使用watch监听一个对象中的属性的实现方法
2019/05/10 Javascript
详解vue中在循环中使用@mouseenter 和 @mouseleave事件闪烁问题解决方法
2020/04/07 Javascript
jQuery实现开关灯效果
2020/08/02 jQuery
如何利用nodejs实现命令行游戏
2020/11/24 NodeJs
Python里隐藏的“禅”
2014/06/16 Python
约瑟夫问题的Python和C++求解方法
2015/08/20 Python
详解Python迭代和迭代器
2016/03/28 Python
高效使用Python字典的清单
2018/04/04 Python
Python使用爬虫抓取美女图片并保存到本地的方法【测试可用】
2018/08/30 Python
Python2和Python3中urllib库中urlencode的使用注意事项
2018/11/26 Python
Python+opencv+pyaudio实现带声音屏幕录制
2019/12/23 Python
40行Python代码实现天气预报和每日鸡汤推送功能
2020/02/27 Python
python创建文本文件的简单方法
2020/08/30 Python
Pycharm如何自动生成头文件注释
2020/11/14 Python
美国办公用品购物网站:Quill.com
2016/09/01 全球购物
ProForm英国站点:健身房和健身器材网上商店
2019/06/05 全球购物
某公司面试题
2012/03/05 面试题
自荐信的五个重要部分
2013/10/29 职场文书
公司员工的自我评价范例
2013/11/01 职场文书
县级文明单位申报材料
2014/05/23 职场文书
出纳工作检讨书范文
2014/12/27 职场文书
2015年农村党员公开承诺事项
2015/04/28 职场文书
Python实现提取PDF简历信息并存入Excel
2022/04/02 Python
MySQL磁盘碎片整理实例演示
2022/04/03 MySQL