当 div 元素内的所有图片都加载完毕后,显示该元素

3
我有以下
元素,在其中加载图像。我只想在其中所有的图像都加载完毕后才显示
#main-slider

我尝试了以下jQuery代码:
$(window).load(function() {  
    $('#main-slider').animate({'opacity':1}, 300);
});

但是它会在所有图片都没有加载完成的情况下显示div

CSS

#main-slider,
#main-slider #bo,
#main-slider #bg,
#main-slider #hugo{
    -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
    filter: alpha(opacity=0);
    -moz-opacity:0;
    -khtml-opacity: 0;
    opacity: 0;
}

HTML

<div id="main-slider" class="flexslider">
    <div id="boss" class="tab-container">
        <ul class="slides boss-slides clearfix">
            <li id="1">
                <img src="mobilelp/img/boss_mobile_1.png" />
            </li>
            <li id="2">
                <img src="mobilelp/img/boss_mobile_2.png" />
            </li>
            <li id="3">
                <img src="mobilelp/img/boss_mobile_3.png" />
            </li>
        </ul>
    </div>
    <div id="bo" class="tab-container">
        <ul class="slides bo-slides clearfix">
            <li id="1">
                <img src="mobilelp/img/bo_mobile_1.png" />
            </li>
            <li id="2">
                <img src="mobilelp/img/bo_mobile_2.png" />
            </li>
            <li id="3">
                <img src="mobilelp/img/bo_mobile_3.png" />
            </li>
        </ul>
    </div>
    <div id="bg" class="tab-container">
        <ul class="slides bg-slides clearfix">
            <li id="1">
                <img src="mobilelp/img/bg_mobile_1.png" />
            </li>
            <li id="2">
                <img src="mobilelp/img/bg_mobile_2.png" />
            </li>
            <li id="3">
                <img src="mobilelp/img/bg_mobile_3.png" />
            </li>
        </ul>
    </div>
    <div id="hugo" class="tab-container">
        <ul class="slides hugo-slides clearfix">
            <li id="1">
                <img src="mobilelp/img/hugo_mobile_1.png" />
            </li>
            <li id="2">
                <img src="mobilelp/img/hugo_mobile_2.png" />
            </li>
            <li id="3">
                <img src="mobilelp/img/hugo_mobile_3.png" />
            </li>
        </ul>
    </div>
    <ul class="flex-direction-nav">
        <li><a href="#" class="flex-prev">Previous</a>
        </li>
        <li><a href="#" class="flex-next">Next</a>
        </li>
    </ul>
</div>
3个回答

2
我也有这个需求。我使用了 imagesLoaded 插件 并获得成功。
以下是基于我当前应用程序的伪代码:
$('#main-slider').imagesLoaded({
    progress: function (isBroken, $allImages, $loadedImages, $brokenImages) {
        console.log('ok: ' + $loadedImages.length + ', bad: ' + $brokenImages.length);
    },
    done: function ($images) {
        $('#main-slider').animate({'opacity':1}, 300);
    }
});

其他答案(不需要插件)对您没有起作用吗? - canon

1
它可以变得非常简单(fiddle):
$(function () {
    var $img = $(".waitFor img"),
        n = $img.length;
    $img.on("load error", function () {
        !--n && $(".waitFor").fadeIn(300);
    });
});

这实际上会等待所有图片加载或出错后,才会淡入整个容器。

0

这是一个足够简单的问题,我不想使用插件来解决它。事实上,由于jQuery为所有图像元素提供了方便的 .load() 函数,所以这非常简单:

$(function(){
    var loaded = 0;
    var total = 0;
    $(".waitFor img").each(function(i, e){
        total++;
        $(e).load(function(){
            loaded++;

            if(loaded == total)
                console.log("Everything loaded");
        });
    });
});

JsFiddle

的内容与编程有关。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接