【发布时间】:2012-08-28 15:13:21
【问题描述】:
我有几张图片,每张图片的宽度是1400px,我想在加载所有图片后,提醒所有图片的总宽度,这是我的代码:
var images = new Array("0.jpg", "1.jpg", "2.jpg");
for (var i = 0; i < images.length; i = i + 1) {
$("#img_place").append("<img src='" + images[i] + "'>");
}
var loadedImgsCount = 0;
var imgTotalWidth = 0;
for (var i = 0; i < images.length; i = i + 1) {
var currImg = new Image();
currImg.src = images[i];
currImg.onload = function() {
loadedImgsCount = loadedImgsCount + 1;
imgTotalWidth = imgTotalWidth + currImg.width;
}
}
interv = setInterval(function() {
if (images.length === loadedImgsCount) {
alert(imgTotalWidth );
clearInterval(interv);
}
}, 500);
在 HTML 中:
<div id="img_place">
</div>
此代码例如用于 3 张图像,问题是:在 chrome 和 safari 中,此代码的结果有时不正确:有时 1400,有时 2800,但有时正确:4200。 在 Opera 和 firefox 中,结果总是期望:4200。 请告诉我哪里出错了?为什么我的代码在 safari 和 chrome 中不正确?
【问题讨论】:
-
为什么要使用 setInterval ?你可以把它的代码放在onload中。
-
总是使用数组字面量,从不使用
new Array。var images = ["0.jpg", "1.jpg", "2.jpg"]; -
你知道,
loadedImgsCount++比loadedImgsCount = loadedImgsCount + 1要短很多。与imgTotalWidth = imgTotalWidth + currImg.width相同:imgTotalWidth += currImg.width。
标签: javascript jquery image load