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 相关文章推荐
IE6不能修改NAME问题的解决方法
Sep 03 Javascript
JavaScript中的Truthy和Falsy介绍
Jan 01 Javascript
基于jquery实现在线选座订座之影院篇
Aug 24 Javascript
jQuery formValidator表单验证
Jan 07 Javascript
Web开发必知Javascript技巧大全
Feb 23 Javascript
AngularJS 输入验证详解及实例代码
Jul 28 Javascript
BootstrapTable+KnockoutJS自定义T4模板快速生成增删改查页面
Aug 01 Javascript
node实现简单的反向代理服务器
Jul 26 Javascript
使用canvas实现一个vue弹幕组件功能
Nov 30 Javascript
深入理解vue中的slot与slot-scope
Apr 22 Javascript
基于webpack4+vue-cli3项目实现换肤功能
Jul 17 Javascript
javascript 易错知识点实例小结
Apr 25 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输入流php://input使用示例(php发送图片流到服务器)
2013/12/25 PHP
PHP5.5和之前的版本empty函数的不同之处
2014/06/13 PHP
CentOS6.5 编译安装lnmp环境
2014/12/21 PHP
详解WordPress中用于更新和获取用户选项数据的PHP函数
2016/03/08 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
php微信公众号开发之微信企业付款给个人
2018/10/04 PHP
jquery子元素过滤选择器使用示例
2013/06/24 Javascript
使用JS画图之点、线、面
2015/01/12 Javascript
JavaScript操作cookie类实例
2015/03/31 Javascript
用js动态添加html元素,以及属性的简单实例
2016/07/19 Javascript
微信小程序 欢迎界面开发的实例详解
2016/11/30 Javascript
实现一个简单的vue无限加载指令方法
2017/01/10 Javascript
几种tab切换详解
2017/02/03 Javascript
值得分享和收藏的xmlplus组件学习教程
2017/05/05 Javascript
nodejs 子进程正确的打开方式
2017/07/03 NodeJs
Nodejs中使用phantom将html转为pdf或图片格式的方法
2017/09/18 NodeJs
Three.js利用Detector.js插件如何实现兼容性检测详解
2017/09/26 Javascript
详解js中let与var声明变量的区别
2020/04/05 Javascript
Vue.js实现可编辑的表格
2019/12/11 Javascript
详细介绍解决vue和jsp结合的方法
2020/02/06 Javascript
JavaScript进阶(二)词法作用域与作用域链实例分析
2020/05/09 Javascript
解决vue打包 npm run build-test突然不动了的问题
2020/11/13 Javascript
Python模块学习 filecmp 文件比较
2012/08/27 Python
利用Python3分析sitemap.xml并抓取导出全站链接详解
2017/07/04 Python
Pycharm配置远程调试的方法步骤
2018/12/17 Python
CentOS7下安装python3.6.8的教程详解
2020/01/03 Python
Python with语句用法原理详解
2020/07/03 Python
Python reques接口测试框架实现代码
2020/07/28 Python
澳大利亚宠物食品和药物在线:Jumbo Pets
2018/03/24 全球购物
十岁生日家长答谢词
2014/01/17 职场文书
《雪地里的小画家》教学反思
2014/02/22 职场文书
2014村务公开实施方案
2014/02/25 职场文书
幼儿园母亲节活动方案
2014/03/10 职场文书
国际贸易专业求职信
2014/06/04 职场文书
2015年幼儿园新年寄语
2014/12/08 职场文书
茶花女读书笔记
2015/06/29 职场文书