JQuery中的BG Image预加载器

时间:2010-12-05 01:44:47

标签: jquery image preloader preload image-preloader

我有一系列图片

var photos = ["images/bg01.jpg", "images/bg02.jpg", "images/bg03.jpg"];

我在这个数组中循环,并根据间隔

将它们作为div的背景
$("#bgimg" + activeContainer).css({
        "background-image" : "url(" + photos[i] + ")",
        "display" : "block",
        "z-index" : currentZindex
    });

编辑:我需要在执行setInterval函数之前预先加载所有三个图像。

提前致谢!!

3 个答案:

答案 0 :(得分:1)

(function($) {
    var photos = ["images/bg01.jpg", "images/bg02.jpg", "images/bg03.jpg"];

    var i = 0;
    function preloadImage() {

        var image = new Image();

        image.onload = function() {
            $("#bgimg" + activeContainer).css({
                "background-image" : "url(" + photos[i] + ")",
                "display" : "block",
                "z-index" : currentZindex
            });

            i++;
            preloadImage();
        };

        image.src = photos[i];


    };

}(jQuery);

这将...

  1. 加载您的图片
  2. 将其设置为容器的背景
  3. 重复下一张图片

答案 1 :(得分:1)

将变量设置为必须加载的图像数。每次图像完成加载时减少计数器,当计数器达到零时,开始显示图像。

function photoLoaded() {
    if(!--numPhotosLeft) {
        // start showing images
    }
}

var photos = ["images/bg01.jpg", "images/bg02.jpg", "images/bg03.jpg"];
var numPhotosLeft = photos.length;

for(var i = 0; i < photos.length; ++i) {
    var img = new Image();
    img.onload = photoLoaded;
    img.src = photos[i];
}

答案 2 :(得分:0)

你可以这样做:

var imgCount = images.length;
var counter = 0;
$.each(images, function(i, n) {
   // load each image
   $("<img />").attr("src", n)
               .load(function() {
                  counter++;
                  if(imgCount == counter) {
                     // all images have loaded
                     // call setInterval
                  }

              });
});