【问题标题】:html2canvas - toDataURL does not work all the time [duplicate]html2canvas - toDataURL 一直不起作用[重复]
【发布时间】:2017-03-22 07:13:19
【问题描述】:

我正在尝试将表格“克隆”到 html 中的图像,代码有效但并非一直有效,它仅在按钮的第二次或第三次触发时有效。

下图显示,第一次点击时不显示图像表,只显示一个框。但是在第二次单击时它会显示出来。我认为这与“图像加载概念”有关,但我对此不太熟悉,并且存在与此相关的问题,但没有给出答案或给出的答案不起作用。

我的代码有点类似于下面的小提琴,但我有一个动态表。它可以随时更改

jsfiddle codes

$(document).ready(function() {
    var image2 = new Image();
  $("#more").click(function() {

    var tableImage;
    html2canvas($("#dataTable"), {
      onrendered: function(canvas) {
        tableImage = canvas.toDataURL("image/png");
        image2.src = tableImage;
      },
      allowTaint: false
    });

    $('.reportContents').append('<input id="title" style="border:none;"             name="title" type="hidden" value="null"/>');

    $('.reportContents').append('<input type="hidden" id="imageSrc"             name = "imageSrc" value="' + tableImage + '"/>');

    $('.reportContents').append('<img style="width: 90%;" id="image" src="' + image2.src + '">');

  });

});

【问题讨论】:

  • 高亮显示相关代码
  • 按照你的方式阅读你的代码并不容易,请你把它托管在 jsfiddle 上好吗?非常感谢
  • 顺便说一句,我的代码中的表格是动态的,所以我不能真正将 htmlcanvas 放在 onclick 之外

标签: javascript html html5-canvas todataurl


【解决方案1】:

您正试图在派生图像完成之前附加它。在 html2canvas 函数中移动 append 函数:

$(document).ready(function() {
  var image2 = new Image();
  $("#more").click(function() {
    var tableImage;
    html2canvas($("#dataTable"), {
      onrendered: function(canvas) {
        tableImage = canvas.toDataURL("image/png");
        image2.src = tableImage;
        $('.reportContents').append('<input id="title" style="border:none;"             name="title" type="hidden" value="null"/>');
        $('.reportContents').append('<input type="hidden" id="imageSrc"             name = "imageSrc" value="' + tableImage + '"/>');
        $('.reportContents').append('<img style="width: 90%;" id="image" src="' + image2.src + '">');
      },
      allowTaint: false
    });
  });
});

更新FIDDLE

【讨论】:

  • 不知何故这不适用于我的代码,我不知道这是否是原因,我正在我的函数中创建 reportContents div。目前代码似乎不再进入 html2Canvas 试图将控制台行放入我的代码中。 var para = document.createElement("div"); var element = document.getElementById("reportBody"); para.setAttribute("class", "reportContents"); element.appendChild(para);
  • 我想你可能会发现 html2canvas 在这种情况下不起作用。从文档中:“它实际上并没有截取页面的屏幕截图,而是根据它从 DOM 读取的属性构建它的表示形式”。您可能需要将内容加载到加载时存在的元素中。
  • 谢谢我已经这样做了,创建了几个 div 等等。我认为我不需要在这里发布答案,因为有一大堆代码。这不知何故很接近,所以只会接受这个作为答案
猜你喜欢
  • 2019-08-06
  • 2018-01-13
  • 2017-07-17
  • 2017-10-27
  • 2018-02-09
  • 2017-08-27
  • 1970-01-01
  • 2015-04-22
  • 2017-12-18
相关资源
最近更新 更多