如果一些图像是经典的HTML图像,那么让javascript等待加载很容易。
但是我不知道如果图像被加载为CSS backuground-image
,该怎么做!
有可能吗?
jQuery .load()
方法似乎不适用。。我缺乏想法
它查找具有src属性或backgroundImage-css属性的元素,并在加载它们的图像时调用一个操作函数。
/**
* Load and wait for loading images.
*/
function loadImages(images, action){
var loaded_images = 0;
var bad_tags = 0;
$(images).each(function() {
//alert($(this).get(0).tagName+" "+$(this).attr("id")+" "+$(this).css("display"));
var image = new Image();
var src = $(this).attr("src");
var backgroundImage = $(this).css("backgroundImage");
// Search for css background style
if(src == undefined && backgroundImage != "none"){
var pattern = /url("{0,1}([^"]*)"{0,1})/;
src = pattern.exec(backgroundImage)[1];
}else{
bad_tags++;
}
// Load images
$(image).load(function() {
loaded_images++;
if(loaded_images == ($(images).length - bad_tags))
action();
})
.attr("src", src);
});
}
一种替代方法是通过AJAX获取图像数据,作为base64编码的png,并将其应用于元素的background-image
属性。
例如:
$.get('/getmyimage', function(data) {
// data contains base64 encoded image
// for ex: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==
$('#yourElement').css('background-image', 'url("' + data + '")');
});
您还需要一个服务器端脚本来读取图像,将其转换为base64编码的png(并可能缓存它),然后返回相同的内容。
试试这个。。。
它是一个jQuery插件,可以让你控制等待图像加载
项目主页
螺纹@SO要求jQuery在执行之前等待加载所有图像的官方方式
回答@SO(ShortLink)
这是未经测试的代码,但请尝试以下操作:
$(document).ready(
function()
{
var imgSrc = $('theTargerElement').css('background-image');
var imgTag = $('<img>').attr('src',imgSrc).appendTo( 'body' );
}
);
$(document)
.load(
function()
{
// do stuff
}
);