gpt4 book ai didi

javascript onload 循环中的事件

转载 作者:行者123 更新时间:2023-11-28 01:33:24 25 4
gpt4 key购买 nike

我正在尝试循环遍历图像的 json 数组,将图像添加到 map 上的标记。由于 javascript 是异步的,它给我带来了问题,我想等待图像加载后再将其添加到我的 map 中,并且无法在循环完成之前加载我的图像。这是否可以实现,因为我尝试使用回调来实现但无法使其工作。

 for (var i = 0; i < jsonObj.potholes.length; i++)
{
var image = new Image();



image.src = "data:image/png;base64," + jsonObj.potholes[i].image;
image.onload = function()
{
//alert("image loaded");
EXIF.getData(image, function()
{
otn = parseInt(EXIF.getTag(image, "Orientation"));
dataURL = drawCanvas(otn, image).toDataURL();

var circle = L.circle([jsonObj.potholes[i].lat, jsonObj.potholes[i].lon], 18, {
color: 'yellow',
fillColor: 'red',
fillOpacity: 0.5
}).addTo(markersLayerGroup).bindPopup("Pothole ID " + jsonObj.potholes[i].id
+ "<br />Location " + city[i] + "," + street[i] +
"<image src = '" + dataURL + "'></image>");


});



}

最佳答案

您应该实现一个异步循环(使用if):

(function (ondone) {
var index = 0;
nextStep();

function nextStep() {
if (index >= jsonObj.potholes.length) {
if (ondone)
ondone();
return;
}

var i = index++;
var image = new Image();

image.src = "data:image/png;base64," + jsonObj.potholes[i].image;
image.onload = function () {
//alert("image loaded");
EXIF.getData(image, function () {
otn = parseInt(EXIF.getTag(image, "Orientation"));
dataURL = drawCanvas(otn, image).toDataURL();

var circle = L.circle([jsonObj.potholes[i].lat, jsonObj.potholes[i].lon], 18, {
color: 'yellow',
fillColor: 'red',
fillOpacity: 0.5
}).addTo(markersLayerGroup).bindPopup("Pothole ID " + jsonObj.potholes[i].id
+ "<br />Location " + city[i] + "," + street[i] +
"<image src = '" + dataURL + "'></image>");

nextStep();
});
}
}
})(function () { alert("Done!"); });

您还可以使用 Promises 来实现此目的,例如:JavaScript: Async Promise "while loop" .

关于javascript onload 循环中的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21810748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com