У меня есть один DIV, который может содержать множество разных изображений на основе пользовательского ввода. Когда пользователь завершает настройку приложения, окончательным результатом являются изображения, которые были обработаны (одно за другим) в одном и том же DIV. Для захвата изображения я использую html2canvas. Проблема в том, что как только я запускаю цикл для перерисовки изображений по мере необходимости в div и их захвата, каждый раз фактически захватывается только первое изображение.
Иными словами, функция showShelf() в коде ниже никогда не выполняется.
var exportJSON;
var exportDeviceList;
var renderNumber;
function exportAll()
{
exportJSON = [];
exportDeviceList = [];
renderNumber = 0;
for (var i = 0; i < devices.length; i++)
{
var elements = devices[i].elements;
for (var j = 0; j < elements.length; j++)
{
exportDeviceList.push({site: devices[i].site, device: elements[j].id, name: elements[j].tid, config: elements[j].config});
}
}
renderNext();
}
function renderNext()
{
site = exportDeviceList[renderNumber].site;
device = exportDeviceList[renderNumber].device;
config = exportDeviceList[renderNumber].config;
showShelf(site,device,config);
html2canvas(document.getElementById("baseImage"), {allowTaint: true}).then(function (canvas)
{
exportJSON.push({tid: exportDeviceList[renderNumber].name, image: canvas.toDataURL("image/png")});
renderNumber++;
if (renderNumber < exportDeviceList.length)
{
renderNext();
}
});
}
1 ответ
Я нашел свой собственный ответ: после выполнения функции showShelf()
я выполняю функцию setTimeout()
, содержащую фактический вызов html2canvas()
и вызов для выполнения следующего рендеринга.
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Имейте в виду, что JavaScript — это НЕ то же самое, что Java! Включите все ярлыки, относящиеся к вашему вопросу; например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [svelte] и т. д.