【问题标题】:Do an jquery/javascript action after loading set of CSS background images加载一组 CSS 背景图像后执行 jquery/javascript 操作
【发布时间】:2015-08-18 18:17:06
【问题描述】:

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

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

此幻灯片包含 7 张图片,加载时每张图片依次显示(有 700 毫秒的时间延迟),完成后以相同方式显示另一张图片。

每组图片只有一个图片,我的意思是我没有将图片切成小块,它是一个图片,Divs 的一层正在显示图片的不同部分。这是我的代码:

以下每一个DIVs 都包含一张图片

<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>

是两个DIVs的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 &gt; div,我可以为所有DIVs 设置图像,每个都将显示其中的一部分。

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

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

我该如何解决这个问题?

是否只有在加载所有背景图像时才加载slider-container?或任何其他方法来防止空白部分?

谢谢。


更新:

这是javascript(背景图片的url存储在.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 数组包含一组 url,imagePointer 指向当前图像。

我也试过$(window).load(function()$(document).load(function()函数,但由于背景图片是由一些JavaScript代码加载的,而不是在页面加载的开头,所以这种方式似乎没用。

【问题讨论】:

  • 你是如何加载图像的?即您如何在 JavaScript 中更改它们? this 可能会有所帮助。
  • @TahirAhmed 我更新了问题并包含了更改的图像代码
  • @TahirAhmed 谢谢,我会努力的

标签: javascript html css image background


【解决方案1】:

你可以使用这个来预加载所有的图片:

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

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

【讨论】:

  • 您好,谢谢您的回复。有两个问题,$(window).load(function() 没有被触发,第二个是背景图片在加载页面时没有加载,它们是由javascript代码所以load函数在这里没有意义
  • 所以你需要一个接一个地加载脚本?这是你想要的吗?
  • 不,脚本没有问题,问题是加载背景图像。完成一张图片后,加载下一张图片需要几秒钟,它会导致空白部分
  • 你可以在 javascript 中使用 preloading 元素,它可以在处理当前图像的同时预加载下一张图像.. 这对你有用
  • 这是个好主意,因为完成当前图像需要 13 秒,但我该怎么做?
猜你喜欢
  • 2015-01-14
  • 1970-01-01
  • 1970-01-01
  • 2013-03-10
  • 2011-06-18
  • 2014-02-17
  • 1970-01-01
  • 2011-11-03
相关资源
最近更新 更多