加载一组CSS背景图片

时间:2015-08-18 09:44:49

标签: javascript html css image background

我遇到了一个问题,我真的不知道如何解决它。

我创建了一个幻灯片,如下图所示

enter image description here

这个幻灯片包含7个,当它被加载时,每个图像一个接一个地显示(700毫秒时间延迟),并在完成后以相同的方式显示另一个图像。

每一件作品只有一张图片,我的意思是我没有把图片切成碎片,这是一张图片,一层Div s正在显示不同的图像片段。这是我的代码:

以下DIV中的每一个都包含一张图片

<div class='slider-container'>
    <div class="slider-section slider-section1"></div>
    <div class="slider-section slider-section2"></div>
    <div class="slider-section slider-section3"></div>
    <div class="slider-section slider-section4"></div>
    <div class="slider-section slider-section5"></div>
    <div class="slider-section slider-section6"></div>
</div>

它是两个DIV s的CSS

.slider-container > div{
    position: absolute;
    box-shadow : 2px 3px 21px #303030;
    display: none;
}
.slider-section1{
    background:  repeat scroll -32px -42px / 470px 360px rgba(0, 0, 0, 0);
    height: 138px;
    width: 188px;
    left:32px;
    top : 42px;
}
.slider-section2{
    background: repeat scroll -222px -2px / 470px 360px rgba(0, 0, 0, 0);
    height: 178px;
    width: 80px;
    left:222px;
    top : 2px;
}
.
.
.

现在通过将背景图片设置为.slider-container > div,我可以为所有DIV设置图片,每个图片都会显示其中的一部分。

加载背景图片时出现延迟问题。因为背景图像是由Javascript更改的(背景图像的url存储在Javsscript中的数组中),有时加载图像需要几秒钟,这会导致像这样的空白部分

enter image description here

显示空的一组部分然后等待下次浏览器缓存图像是不好的。第一次加载幻灯片时也会发生这种情况。

如何解决此问题?

是否仅在加载了所有背景图像时加载slider-container?或任何其他方法来防止空节?

感谢。

更新

这是javascript(背景图片的网址存储在.preload-image span.field-content元素中)

(function($)
{
    var imageArray= [];
    var rate = 700;
    var imagePointer=0;
    var imageCounter=0;
    $(document).ready(function()
    {
        function slider(){
            var time=300;
            $(".slider-container > div").css("background-image","url('"+imageArray[imagePointer]+"')");
            imagePointer++;
            if(imageCounter == imagePointer)
                imagePointer=0;
            setTimeout(
                    function() 
                     {
                         $(".slider-section1").fadeIn(time);
                     }, rate);
                setTimeout(
                        function() 
                        {
                            $(".slider-section2").fadeIn(time);
                        }, rate * 2);
                setTimeout(
                        function() 
                        {
                            $(".slider-section3").fadeIn(time);
                        }, rate * 3);
                setTimeout(
                        function() 
                        {
                            $(".slider-section4").fadeIn(time);
                        }, rate * 4);
                setTimeout(
                        function() 
                        {
                            $(".slider-section5").fadeIn(time);
                        }, rate * 5);
                setTimeout(
                        function() 
                        {
                            $(".slider-section6").fadeIn(time);
                        }, rate * 6);
                setTimeout(
                        function() 
                        {
                            $(".slider-section7").fadeIn(time);
                        }, rate * 7);
                setTimeout(
                        function() 
                        {
                            $(".slider-container > div").fadeOut(time);
                        }, rate * 12);
        }
        $(".preload-image span.field-content").each(function() {
               var src = $(this).text();
               imageArray[imageCounter++] = src;
        });
        slider();
        setInterval(function() {
            slider();
        },rate * 12.5);
    }); 
})(jQuery);

imageArray数组包含一组网址和imagePointer指向当前图片。

我还尝试了$(window).load(function()$(document).load(function()函数,但由于背景图像是由某些JavaScript代码加载的,而不是在页面加载开始时加载,所以这种方式似乎没用。

1 个答案:

答案 0 :(得分:0)

您可以使用以下方法预加载所有图像:

$.preloadImages = function() {
  for (var i = 0; i < arguments.length; i++) {
    $("<img />").attr("src", arguments[i]);
  }
}

$.preloadImages("image1.jpg","image2.jpg");