首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法通过html2canvas下载多个HTML元素

无法通过html2canvas下载多个HTML元素
EN

Stack Overflow用户
提问于 2022-09-01 11:39:39
回答 1查看 41关注 0票数 0

我试图用html2canvas的div制作一个报价下载系统。但我试图通过这个过程来建立这个系统。但这是行不通的。

这里是Html元素:

代码语言:javascript
复制
    **First div:**
    <div class="htmltoimage" style="background-color: skyblue;">
        <!-- <img width="100px" src="raj2.jpg"> -->
        <h1>Dhaka</h1>
        <button onclick="downloadimage()" class="clickbtn">Download This</button>
    </div>

    **First div:**
    <div class="htmltoimage" style="background-color: skyblue;">
        <!-- <img width="100px" src="raj2.jpg"> -->
        <h1>Dhaka</h1>
        <button onclick="downloadimage()" class="clickbtn">Download This</button>
    </div>

这里是html2canvas代码:

代码语言:javascript
复制
function downloadimage() {
        var container =  $(this).closest('.htmltoimage');
       
        html2canvas(container, {allowTaint: true}).then(function (canvas) {

            var link = document.createElement("a");
            document.body.appendChild(link);
            link.download = "html_image.jpg";
            link.href = canvas.toDataURL();
            link.target = '_blank';
            link.click();
            
        });
    }

注意:我已经包含了JQuery文件和html2canvas链接。当有人在此时点击第一个div下载时,只有这个div会被下载。就这样,等等……

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-01 12:59:42

下面是我尝试过的,您可以在单击每个元素时逐一下载全部内容。

您需要选择要下载的所有元素,然后可以进行一串下载或激发事件侦听器来一个接一个地下载。

代码语言:javascript
复制
function download(url) {
  var a = $("<a style='display:none' id='js-downloder'>")
    .attr("href", url)
    .attr("download", "test.png")
    .appendTo("body");

  a[0].click();

  a.remove();
}

function saveCapture(element) {
  html2canvas(element).then(function(canvas) {
    download(canvas.toDataURL("image/png"));
  })
}


var elements = document.querySelectorAll("#capture");
elements.forEach(function(element) {
  element.addEventListener('click', function() {
    saveCapture(element);
    console.log(saveCapture(element));
  })
})

//to download all
$('#btnDownload').click(function() {
  var elements = document.querySelectorAll("#capture");
  elements.forEach(element => {
    saveCapture(element);
  })
})
代码语言:javascript
复制
@import url('https://fonts.googleapis.com/css?family=Noto+Sans:400,700');
.mainContainer {
  width: 500px;
  height: 600px;
  display: flex;
  align-items: center;
  flex-flow: column;
  gap: 20px;
  margin: 0 auto;
}

#capture {
  margin: 0 auto;
  width: 100%;
  height: 100px;
  overflow: hidden;
}

textarea {
  width: 100%;
  padding: 2rem .5rem;
  border: 0;
  text-align: center;
  color: #fff;
  background: slateblue;
  font-family: 'Noto Sans', sans-serif;
  font-weight: 700;
  font-size: 2rem;
  line-height: 1.5;
  resize: none;
  max-height: 100%;
  min-height: 100%;
}

#btnDownload {
  background-color: pink;
  border: none;
  color: #000;
  padding: 15px 32px;
  text-align: center;
  text-decoration: none;
  font-size: 16px;
}
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="mainContainer">
  <a href="#" class="" id="btnDownload">Download</a>

  <div id="capture">
    <textarea maxlength="110">Click to edit...</textarea>
  </div>

  <div id="capture">
    <textarea maxlength="110">Click to remove...</textarea>
  </div>
</div>

你可以试一试,它应该管用的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73568754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档