在safari和chrome中,js图像加载产生了奇怪的结果
strange result from js image load, in safari and chrome
我有几个图像,每个图像的宽度是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。在歌剧和萤火虫中,结果总是意料之中的:4200。请告诉我,我哪里出错了?为什么我的代码在safari和chrome中工作不正确?
执行相反操作:
currImg.onload = function() {
loadedImgsCount = loadedImgsCount + 1;
imgTotalWidth = imgTotalWidth + currImg.width;
};
currImg.src = images[i];
您的问题是,当图像在缓存中时,可能不会调用onload
函数,因为load
事件是在设置onload
回调之前生成的。
顺便说一句,通常这样做是为了增加一个变量:
loadedImgsCount++;
只要宽度属性不是硬编码的,我更喜欢检查图像的宽度,以确定是否加载了它。这样就避免了缓存问题。
var
images = ["0.jpg", "1.jpg", "2.jpg"],
images_place = $("#img_place"),
images_loaded_interval = setInterval(function() {
var total_width = 0;
for (var i = 0; i < images.length; i++)
if($('img',images_place).eq(i).width()*1 == 0) return;
else total_width += $('img',images_place).eq(i).width()*1;
alert(total_width);
clearInterval(images_loaded_interval);
}, 500);
for (var i = 0; i < images.length; i++)
images_place.append("<img src='" + images[i] + "'>");
相关文章:
- 一旦加载并渲染了角度引导typeahead,就使用回调
- 是否同步加载了LINK元素
- ajax加载了内容,脚本没有执行
- 由于$compile,Javascript(Angular)嵌套指令加载了两次
- 如何检测是否加载了iframe
- 如何知道用户已经重新加载了网页,使用jquery.如果用户重新加载网页,
- 为什么Highchart在我的rails应用程序中加载了两次?(未捕获的Highcharts错误#16)
- 如何知道是否加载了JavaScript(脚本)
- 我的jQuery加载请求是否被调用了两次
- 在safari和chrome中,js图像加载产生了奇怪的结果
- 我想在每个按钮点击事件上加载多个图表.我使用了下面的谷歌代码
- JQuery Masonry.Ajax图标和“;加载新项目”;绳子放错地方了
- 在下拉列表中的页面加载中已经选择了一个选项,该选项也可以更改
- j查询如何在加载了 load() 函数的页面上进行 POST/AJAX,而无需刷新页面
- 为什么require.js似乎在初始页面加载时加载了我的所有模块
- 如何触发所有模块都加载了requireJs
- jQuery或Javascript检查是否加载了图像
- jQuery:一旦加载了图像的子集,就执行函数
- getElementById有时为null.已经试过了.加载完毕.准备好了
- 从mysql数据库加载特定的行数,也增加了加载更多的功能