2016-11-08 8 views
-2

Я пытаюсь «клонировать» таблицу к изображению в html, код работает, но не все время, он работает только на втором или третьем триггере кнопки.html2canvas - toDataURL не работает все время

На приведенном ниже рисунке показано, что при первом нажатии таблица изображений не отображается, отображается только поле. НО во втором щелчке отображается. Я думаю, что это имеет какое-то отношение к «концепции кодирования изображений», но я не знаком с этим, и есть вопросы, связанные с этим, но ответов нет или ответ не работает.

enter image description here мой код как-то похож на скрипку ниже, но у меня динамический стол. она может измениться в любое время

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 + '">'); 

    }); 

}); 
+0

highlitend код, который связан – SCS

+0

Это не очень легко читать ваш код так, как вы сократить его, не могли бы вы разместить его на jsfiddle пожалуйста ? Большое спасибо – Cr3aHal0

+0

https://jsfiddle.net/afgz3cuy/9/ @ Cr3aHal0 добавила мою скрипку, извините за это, код просто изменил какую-то часть, чтобы заставить ее работать без других частей моего кода. – SCS

ответ

1

Вы пытаетесь добавить полученное изображение до его завершения. Переместить функцию на добавление в функции html2canvas:

$(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

+0

, так или иначе это не работает с моими кодами, я не знаю, является ли это причиной, я создаю div в ReportContents внутри моей функции. в настоящее время код, похоже, не вводит html2Canvas, который больше не пытался помещать строки консоли внутри моих кодов. 'var para = document.createElement (" div "); var element = document.getElementById ("reportBody"); para.setAttribute («класс», «reportContents»); element.appendChild (para); ' – SCS

+0

Я думаю, вы можете обнаружить, что html2canvas не будет работать в этой ситуации. Из документации: «на самом деле он не снимает скриншот страницы, а создает его представление на основе свойств, которые он читает из DOM». Возможно, вам потребуется загрузить содержимое в элемент, который существует при загрузке. – sideroxylon

+0

спасибо, я сделал это уже, разбил несколько div и так далее. Я не думаю, что мне нужно опубликовать ответ здесь, так как есть целая куча кодов. это как-то близко, поэтому просто примите это как ответ – SCS

 Смежные вопросы

  • Нет связанных вопросов^_^