Несколько вещей, которые я заметил: Ваша переменная 'firstSlide' всегда перезаписывалась функцией pdfMe()
при каждом ее вызове.Это никогда не переходило на ветку if(next === idFirst)
.Это также привело к тому, что браузер снова и снова пытался асинхронно переходить к pdfSlide()
, который сломал браузер.
Вы передали одну и ту же переменную firstSlide дважды в функцию pdfSlide()
, но это ничего не сломало.не нужно.
Я считаю, что приведенное выше сравнение является ключом к повышению вашей производительности.Я просто добавил флаг «first», чтобы показать вам, как я подхожу к сохранению самого первого элемента, а затем запускаю итерацию.Когда вы дойдете до последнего (я не смог определить его по вашему коду), попробуйте придумать другой оператор if()
для выхода из рекурсивной функции.
Я знаю, что это не будет копией-пастой ответ, но, надеюсь, направит вас в правильном направлении.
var first = true;
var firstID = "";
function pdfMe(){
var pdf = new jsPDF('l');
var slides = document.getElementById("diapoStock").children;
if(first) firstID = slides[0].id; // creating this 'first' flag not to overwrite with every iteration
first = false;
pdfSlide(slides[0].id,firstID,pdf); // you were passing the same argument twice to the pdfSlide function. Removed one of those
};
// Added these options from the html2canvas documentation
var options = {
async: true,
allowTaint: false,
imageTimeout: 0
}
function pdfSlide(id,firstID,pdf){
document.getElementById("pdfOutput").innerHTML="";
var next = nextElementOf(id.substr(0,id.length-3)+"div"); // this needs to be set differently
showMe(id.substr(0,id.length-3));
html2canvas(document.getElementById("central",options)).then(function(canvas){
document.getElementById("pdfOutput").appendChild(canvas);
var img = canvas.toDataURL("image/png");
pdf.addImage(img, 'PNG', 0, 0, 297, 210);
if(next.id === firstID){ // <-- this condition never happened and because of asynchronous behaviour browser tries to load the else->recursive again and again
endPDF(pdf);
}
else{
pdf.addPage();
pdfSlide(next,idFirst,pdf);
}
});
}
//Print
function endPDF(pdf){
pdf.save('{{ propale.titre }}.pdf');
}