Скриншот скрытого div с использованием html2canvas
Как сделать скриншоты скрытого div?
Код, приведенный ниже, не работает для скрытого div.
HTML
<div id="mydiv" style="display:none;" >
<p>Text</p>
</div>
<div id="canvas" style="display:none;">
<p>Canvas:</p>
</div>
<div id="image">
</div>
SCRIPT
<script>
var elem = $('#printDiv');
html2canvas(elem, {
onrendered: function (canvas) {
var data = canvas.toDataURL('image/png');
var image = new Image();
image.src = data;
document.getElementById('image').appendChild(image);
}
});
</script>
Он работает, когда мы устанавливаем стиль div "mydiv" как "display: block".
Ответы
Ответ 1
Вы можете использовать opacity, равный 0. Вот пример:
<div style="position: absolute; opacity: 0.0;">
<div id="tempImageThumbnail"></div>
</div>
var tempImageThumb = $('#tempImageThumbnail');
tempImageThumb.append("<div>some text</div>");
html2canvas([tempImageThumb.get(0)], {
onrendered : function(canvas) {
document.body.appendChild(canvas);
}
});
Ответ 2
Используйте "видимость: нет" вместо "display: none" в div и измените следующее в файле html2canvas.js script - в функции parseElement change
if (getCSS(el, 'display') !== "none" && getCSS(el, 'visibility') !== "hidden")
to
if (getCSS(el, 'display') !== "none")
Ответ 3
Я не уверен, что это невозможно. Как насчет отображения div, захвата и затем скрыть его снова?
var elem = $('#printDiv');
html2canvas(elem, {
onrendered: function (canvas) {
elem.show();
var data = canvas.toDataURL('image/png');
var image = new Image();
image.src = data;
document.getElementById('image').appendChild(image);
elem.hide();
}
});
Ответ 4
html2canvas предоставляет опцию " onclone", передавая клонированный документ. Вы можете установить видимость своего скрытого элемента.
onclone: function(doc){
hiddenDiv = doc.getElementById('myDiv');
hiddenDiv.style.display = 'block';
}
Ответ 5
Во-первых, смею сказать: это решение будет работать нормально во всех случаях إن شاء الله
Поскольку это решение основано на jQuery API, не используйте hide/show
, а используйте fadeOut/fadeIn
вместо этого.
SCRIPT:
<script>
var elem = $('#printDiv');
if(!elem.is(":visible")){
elem.show();elem.fadeIn(1);elem.fadeOut(1);
}
html2canvas(elem, {
onrendered: function (canvas) {
//your staff here
}
});
</script>
ПРИМЕЧАНИЕ.
Мы используем этот репозиторий html2canvas, синтаксис будет then
вместо onrendered
обратного вызова:
<script>
var elem = $('#printDiv');
if(!elem.is(":visible")){
elem.show();elem.fadeIn(1);elem.fadeOut(1);
}
html2canvas(elem).then(function (canvas) {
//your staff here
}
);
</script>
Ответ 6
Использовать видимость: свернуть он будет работать