【发布时间】:2018-08-10 01:19:15
【问题描述】:
这里我有一个简单的测试代码,它在浏览器中加载图像测试。这里我使用异步 onload 事件在完成加载后将图像添加到 dom。图像加载得很好。问题是如果我连续重新加载页面多次图像序列更改。好像 image-2 在 image-1 之前加载,有时 image-3 先加载,等等。我怎么做确保图像按顺序加载,例如每次加载页面时先加载 image1,然后加载 image2,image3 等。我该怎么做?
var images = ['cat1.png','cat2.jpg','cat3.jpg'];
var i = 0;
images.forEach(function(elem,index,arr){
var image=new Image();
image.onload = function(){
document.body.appendChild(image);
console.log(++i);
};
image.onerror = function(){
console.log('error occured');
}
image.src = elem;
image.style.width = '300px';
image.style.height = '300px';
});
【问题讨论】:
-
但是 foreach 是一种同步方法。它应该阻止所有内容,直到第一个图像加载,不是吗?
-
@AL-zami
onload是一个异步事件,所以forEach的回调不等待图片下载,它只是开始下载然后继续 -
您无法控制图像完成加载的顺序。我认为你有两个选择。选项 1 - 在加载每个图像时设置一个标志,您可以在所有图像都加载时显示图像,或者在序列中的下一个图像可用时立即显示它。选项 2 - 等到第一个加载完成后再请求第二个,依此类推(但这当然会很慢)。
-
使用 Promise 能解决这类问题吗?李@Roberrrt 说?
标签: javascript asynchronous onload