Javascript重新加载预加载的图像
下面的Javascript旨在预加载图像,将div的背景设置为图像,然后淡入整个divJavascript重新加载预加载的图像,javascript,jquery,image,preload,Javascript,Jquery,Image,Preload,下面的Javascript旨在预加载图像,将div的背景设置为图像,然后淡入整个div $("<img/>") .attr("src", "../services/imageResize.php?img=" + img + "&width=150") .load(function(e){ $("<div/>", { class: "smallThumb" }) .css("ba
$("<img/>")
.attr("src", "../services/imageResize.php?img=" + img + "&width=150")
.load(function(e){
$("<div/>", {
class: "smallThumb"
})
.css("background", "url(" + $(this).attr("src") + ") no-repeat center center")
.appendTo(images)
.fadeIn(500);
if(count == imgTotal)
{
loadingImages = false;
images.css("background","#fff");
}
});
count++;
$(“”{
班级:“小拇指”
})
.css(“背景”,“url”(+$(this).attr(“src”)+”)无重复中心)
.appendTo(图像)
.fadeIn(500);
如果(计数==imgTotal)
{
加载图像=错误;
css(“背景”,“#fff”);
}
});
计数++;
我在Chrome和Safari中测试过它;两者都将div淡入,然后完成图像加载。我对是什么导致它为.css语句重新加载图像感到困惑。您是否尝试将图像硬编码到隐藏的页面中,并查看发生了什么?问题的一部分是,您正在传递URL参数,这可能会使图像彼此唯一。这是两件不同的事情。HTMLDOM和CSS,它将加载两次。他们俩都不太了解对方。仅仅因为您使用相同的src“string”,并不意味着它们使用相同的src图像内容。我会将图像src设置为单像素类型,然后加载背景。这是一个有很好文档记录的CSS背景图像方法。此外,缓存可以帮助它至少不会从服务器请求两次。无论如何,这是一件好事。我认为您的问题是,
onload
事件在映像完全加载之前触发。如果您假设图像已完全加载,它将显示为正在重新加载
每当bowser准备渲染图像时,img.onload
将触发。毫无疑问,图像将被完全加载。测试图像是否已完全加载的唯一方法是使用img.complete
属性
不久前我回答了这个问题
在回答之后,我写了一点
你可以像使用它一样使用它
$(function () {
$.preload('your-image.png').progress(function (img) {
// set background
$('body').css('background', 'url(' + img.src + ')');
});
});
检查两个映像请求的标题,并查看是否输出了适当的缓存逻辑。可能您没有缓存头,因此浏览器被迫获取两个版本,即使它们是同一个映像。有两个部分,缓存良好,不使用大映像加载DOM src,另一部分让CSS完成工作。缓存只是隐藏了编码问题。正如Marc B所说,由于您是从PHP脚本获取图像,因此web服务器可以将标题设置为无缓存。如果你愿意,发布一个链接到其中一个图片,这样我们就可以检查了。哦,停止使用img-take作为css背景资料。img部分在查看代码时真的毫无意义,css正在为div设置背景。