Ну, я думаю, что все может быть проще, если вы просто используете теги img
, но если вы действительно хотите использовать фоновые изображения, тогда я мог бы только придумать обходной путь.
Хитрость в том, чтобы создать новое изображение (используя объект изображения Javascript ) и убедиться, что оно загружено, но это изображение не отображается. Как только изображение будет загружено в кэш, оно будет доступно в качестве фонового изображения в вашей галерее.
Итак, все, что вам нужно сделать, это убедиться, что вы меняете фоновое изображение LI
изображения только после загрузки соответствующего изображения. Изначально вы можете загрузить все LI
с изображением по умолчанию «загрузка».
То есть ваш код будет выглядеть примерно так:
HTML (определения style
для загрузки изображения могут быть в вашей внешней таблице стилей):
<ul>
<li id="pic1" style="background-image:url('images/loading.gif')"></li>
<li id="pic2" style="background-image:url('images/loading.gif')"></li>
<li id="pic3" style="background-image:url('images/loading.gif')"></li>
...
</ul>
Ваш jQuery / Javascript:
var img = new Array();
// The following would be in some sort of loop or array iterator:
var num = [NUMBER] // You'd use this number to keep track of multiple images.
// You could also do this by using $("ul>li").each() and using the index #
img[num] = new Image();
// Specify the source for the image
var imgSource = "http://yourimage.com/example.jpg";
// only append the corresponding LI after the image is loaded
img[num].onload = function() {
$("#pic" + num).attr("style", "background-image:url('" + imgSource + "')");
};
img[num].src = imgSource;
Вы должны будете иметь соответствующие CSS / идентификаторы и т. Д. Для каждого LI
, и вам нужно будет адаптировать вышеуказанное к циклу или функции, которую вы используете для показа своей галереи.
Вот пример jsFiddle . (для тестирования это большое изображение, поэтому загрузка его занимает некоторое время).