onload
函数回调是异步的。这意味着只有在处理整个数组后才能执行。
callback_canvastoImg(imagesLayer, imageObj);
变量imageObj将引用上次创建的图像。
为了避免这种情况,您可以:
-
使用声明变量的现代js语法(如果您应该使用类似
babel
)
const imageObj = new Image();
-
array.forEach
而不是for循环:
array.forEach(function(item, key) {
$(".tmpcontainer").remove();
containerName = containerNameBase + key;
$("#hidden_div").append("<div id='"+containerName+"' class='tmpcontainer'></div>");
var konva_stage =createcanvas(containerName); //create a hidden dynamic div and bind this stage to it
var img = konva_stage .toDataURL("image/png");
var imageObj = new Image();
imageObj.src = img
imageObj.onload = function() {
callback_canvastoImg(imagesLayer, imageObj);
};
}