js把某个div或其他元素用图片的形式导出或下载

很多时候需要用到把页面上的某个块元素用图片的形式导出来,例如导出一些表格构成的单据

思路:把指定的html内容转换成canvas,然后再转换成图片

这里推荐使用这两个库


<script src="https://superal.github.io/canvas2image/canvas2image.js"></script>
<script src="https://html2canvas.hertzen.com/dist/html2canvas.js"></script>

<script>
//使用例子
var html2Img = {
  init: function() {
    this.initDom();
    this.initEvent();
  },
  initDom: function() {
    this.$el = {};
    this.$el.$startBtn = $(‘#clickBtn‘);//触发元素
    this.$el.$htmlSource = $(‘#youhtml‘);//要导出的html
    this.$el.$pngContent = $(‘#imgshow‘);//转换后的图片展示
  },
  initEvent: function() {
    var me = this;
    this.$el.$startBtn.on(‘click‘, function() {
      me.initSavePng(2);
    });
  },
  initSavePng: function(N) {
    var me = this;
    var sourceContent = me.$el.$htmlSource;
    var width = sourceContent.width();
    var height = sourceContent.height();
    var offsetTop = sourceContent.offset().top;
    var offsetLeft = sourceContent.offset().left;
    var canvas = document.createElement("canvas");
    var canvas2D = canvas.getContext("2d");
    // 不能小于1,否则图片不完整
    var scale = N;
    canvas.width = (width + offsetLeft) * scale;
    canvas.height = (height + offsetTop) * scale;
    canvas2D.scale(scale, scale);
    canvas2D.font = "Microsoft YaHei";
    var options = {
      //检测每张图片都已经加载完成
      tainttest: true,
      canvas: canvas,
      scale: scale,
      //dom 放大的宽度,放大倍数和清晰度在一定范围内成正相关
      width: width + offsetLeft,
      // 开启日志,可以方便调试
      logging: true,
      //dom 放大的宽度,放大倍数和清晰度在一定范围内成正相关
      height: height + offsetTop
    };
    html2canvas(sourceContent, options).then(function(canvas) {
      //显示图片-start
      var img = window.Canvas2Image.convertToPNG(canvas, width * scale, height * scale);
      me.$el.$pngContent.append(img);
      // 将图片恢复到原始大小
      me.$el.$pngContent.find(‘img‘).css({
        width: width,
        height: height
      });
      //显示图片-end
      //导出图片
      window.Canvas2Image.saveAsPNG(canvas, width * scale, height * scale);
    });
  }
};
html2Img.init();
</script>

原文地址:https://www.cnblogs.com/chriiess/p/8952028.html

时间: 2024-11-08 14:57:13

js把某个div或其他元素用图片的形式导出或下载的相关文章

js动态删除div元素

在做用户查找时 因为要把查找的结果动态加载和显示,所以,那些html元素要由Ajax动态生成.用户打开查找界面时,有系统推荐的用户,而当用户按条件查找后,查找的结果动态加载和显示.所以考虑到用js来搞. 这个for循环就是移除已有的表单.然后根据Ajax请求过来的数据,动态生成新的表单对象.一定要注意j变量从大往小循环,否则,删除div元素后会引起serchResultLenth=serchResult.children.length;长度的变化(这个问题摸索了好久,才搞定,切记) for(va

使用HTML5的JS选择器操作页面中的元素

上一篇文章介绍了HTML5新增的JavaScript选择器,今晚正式实践一下,使用HTML5的JS选择器操作页面中的元素. 文件命名为:querySelector.html,可在Chrome浏览器中预览效果. 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>使用HTML5的JS选择器操作页面中的元

JS小插件之2——cycle元素轮播

元素轮播效果是页面中经常会使用的一种效果.这个例子实现了通过元素的隐藏和显示来表现轮播效果.效果比较简单. 效果图如下: 源代码如下: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" Content="text/html; charset=utf-8;"> 5 <title> cycle demo </titl

原生js实现的创建和删除元素实例代码

原生js实现的创建和删除元素实例代码:在实际应用中,往往需要动态的创建和删除指定的元素,下面就通过代码实例介绍一下如何实现此功能.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title&g

js实现的div拖动效果实例代码

js实现的div拖动效果实例代码:div的拖动效果在很多效果中都有应用,当然还有很多附加的功能,本章节只是给拖动效果,并介绍一下它的实现过程.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <t

js如何动态为指定的元素添加内容

js如何动态为指定的元素添加内容:在实际应用中要根据代码的执行情况来动态的创建一个元素,然后添加到指定的元素,下面就通过一个简单的实例简单的介绍一下如何实现此效果,代码实例如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/"

CSS+JS实现的div层定位功能和自动消失

CSS顶部固定功能,有空的时候研究了一下CSS的定位功能,做了这个大家熟悉的顶部固定功能,鼠标移上去顶部会消失,并可判断浏览器是否支持audio元素!顶部元素在时间控制下也可自动消失. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns

js实现未知宽高的元素在指定元素中垂直水平居中

js实现未知宽高的元素在指定元素中垂直水平居中:本章节介绍一下如何实现未知宽高的元素在指定元素下实现垂直水平居中效果,下面就以span元素为例子,介绍一下如何实现span元素在div中实现水平垂直居中效果,代码如下: <!DOCTYPE html><html><head><meta charset=" utf-8"><meta name="author" content="http://www.soft

js和jquery获取父级元素、子级元素、兄弟元素的方法(转)

先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的方法作对比 JS的方法会比JQUERY麻烦很多,主要则是因为FF浏览器,FF浏览器会把你的换行也当最DOM元素 原生的JS获取ID为test的元素下的子元素.可以用: 比如: <div id="dom"> <div></div> <div></div> <div></div> </div> var a = docu