2016-11-08 5 views
-2

Ich versuche, eine Tabelle zu einem Bild in HTML zu "klonen", der Code funktioniert aber nicht die ganze Zeit, es funktioniert nur beim 2. oder 3. Auslöser der Taste.html2canvas - toDataURL funktioniert nicht die ganze Zeit

Das folgende Bild zeigt, dass beim ersten Klick die Bildtabelle nicht angezeigt wird nur eine Box angezeigt wird. ABER beim zweiten Klick wird es angezeigt. Ich denke, das hat etwas mit dem "Image-Loding-Konzept" zu tun, aber ich bin damit nicht so vertraut und es gibt Fragen zu diesem, aber keine Antworten gegeben oder die gegebene Antwort funktioniert nicht.

enter image description here mein Code ist irgendwie ähnlich der Geige unten, aber ich habe eine dynamische Tabelle. es kann jederzeit ändern

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

den Code highlitend die – SCS

+0

verbunden ist, ist es nicht ganz einfach, den Code so, wie Sie es schneiden zu lesen, könnten Sie bitte Gastgeber auf jsfiddle Bitte ? Vielen Dank – Cr3aHal0

+0

https://jsfiddle.net/afgz3cuy/9/ @ Cr3aHal0 hinzugefügt meine Geige sorry dafür, der Code ist ähnlich, nur ein Teil bearbeiten, damit es funktioniert, ohne andere Teile meines Codes – SCS

Antwort

1

Sie versuchen die abgeleitete Bild anhängen, bevor es abgeschlossen wurde. Bewegen Sie die Append-Funktion innerhalb der html2canvas Funktion:

$(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 
    }); 
    }); 
}); 

Aktualisiert FIDDLE

+0

irgendwie dies funktioniert nicht mit meinen Codes, ich weiß nicht, ob dies die Ursache ist, ich erstelle das reportContents div innerhalb meiner die Funktion. zur Zeit scheint der Code nicht mehr in die html2Canvas einzudringen, versuchte Konsolenzeilen in meine Codes zu legen. 'var para = document.createElement (" div "); var Element = document.getElementById ("reportBody"); para.setAttribute ("Klasse", "reportContents"); element.appendChild (para); ' – SCS

+0

Ich denke, Sie könnten feststellen, dass html2canvas in dieser Situation nicht funktioniert. Aus der Dokumentation: "Es wird nicht wirklich ein Screenshot der Seite erstellt, sondern es wird basierend auf den Eigenschaften, die er aus dem DOM liest, eine Repräsentation erstellt." Möglicherweise müssen Sie den Inhalt in ein Element laden, das beim Laden vorhanden ist. – sideroxylon

+0

danke ich habe es schon gemacht, mehrere Divs und so weiter. Ich denke nicht, dass ich hier die Antwort posten muss, da es eine ganze Reihe von Codes gibt. Das ist irgendwie nah, also werde ich das als Antwort akzeptieren – SCS

Verwandte Themen