HTML2Canvas не отображает полный div, только то, что видно на экране?

Я пытаюсь использовать HTML2Canvas, чтобы отобразить содержимое div. Вот код:

var htmlSource = $('#potenzial-page')[0];

$('#btn').on("click", function() {          

    html2canvas(htmlSource).then(function(canvas) {
        var img = canvas.toDataURL();
        window.open(img);
    });

});

Я использую v5 beta 3.

Когда этот код работает, он отображает только то, что видно на экране. #potenzial-page div - это, по сути, целая страница, минус верхний и нижний колонтитулы. Весь контент в этом div виден прокруткой (есть некоторые скрытые элементы, но я не хочу, чтобы скрытые элементы были видны на изображении.)

Я не могу найти, что неправильно или почему это не спасет весь div. Я должен также отметить, что изображение выглядит так же высоко, как div, но только частично видимым.

Чтобы привести пример того, что я имею в виду, вот сравнение:

введите описание изображения здесь

Слева - как HTML2Canvas должен отображать div. Правило показывает, как это проявляется при выполнении кода выше. Правильный образ - это то, что видно на экране моих браузеров.

Я попытался добавить параметр height, но это не имеет значения.

UPDATE

Если я перейду к самому верхнему краю страницы, запустите script, он отобразит весь div так, как должен.

Как визуализировать div без прокрутки вверх?

Ответ 1

Решение, которое работало для меня, заключалось в следующем:

.html2canvas-container { width: 3000px !important; height: 3000px !important; }

Это предотвращает ограничение html2canvas рендерингом видимой области (которая по умолчанию является по умолчанию).

Смотрите здесь: https://github.com/niklasvh/html2canvas/issues/117

Ответ 3

enter image description here

Если у вас есть высота, установленная в div, который вы хотите превратить в холст - вы должны удалить его, прежде чем делать снимок. В противном случае он просто отрежет его из-за этой высоты.

 $(".yourElemThatHasSomeHeightSet").css("height", "");

Тогда вы заметите, что прокрутка вниз - все равно обрежет ваш документ. Просто сделайте:

$("html, body").scrollTop(0);

прежде чем сделать снимок.

Ответ 4

Вы можете добавить позицию прокрутки в качестве переменной в html2canvas, что устраняет необходимость прокручивать страницу.

html2canvas(document.querySelector("#your-element"), { scrollX: 0, scrollY: 0 }).then(function(canvas) {

Ответ 5

Я использовал window.scrollTo() в моем случае, и он работал для меня.

Ниже приведен пример кода

$('#btn').on("click", function() { 
    window.scrollTo(0,0);     
    html2canvas(htmlSource).then(function(canvas) {
        var img = canvas.toDataURL();
        window.open(img);
    });
    window.scrollTo(0, document.body.scrollHeight || document.documentElement.scrollHeight);
});

Ответ 6

  window.scrollTo(0,0);  

Добавить это работает для меня.

Ответ 7

Я просто сделал что-то вроде этого, и это сработало для меня:

html2canvas(document.querySelector("#capture2image"), {
            allowTaint: true,
            useCORS: true,
            logging: false,
            height: window.outerHeight + window.innerHeight,
            windowHeight: window.outerHeight + window.innerHeight,