Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
458 views
in Technique[技术] by (71.8m points)

使用瀑布流插件masonry,图片未加载完就会出现重叠现象,怎么解决?

//使用了imagesLoaded插件来判断图片是否加载完毕
var $grid = $('ul#grid');
$grid.imagesLoaded().done( function(instance) {
    // 加载完成
    $grid.masonry({
        // fitWidth: true,
        // initLayout: false,
        itemSelector: '.item',
        columnWidth: '.item',
        percentPosition: true,
    });
})

isImgLoad(function () {
    $grid.masonry("layout");
});

// 判断图片加载的函数
var t_img;
var isLoad = true;
function isImgLoad(callback) {
    $('.img').each(function () {
        if (this.height === 0) {
            isLoad = false;
            return false;
        }
    });
    if (isLoad) {
        clearTimeout(t_img);
        callback();
    } else {
        isLoad = true;
        t_img = setTimeout(function () {
            isImgLoad(callback);
        }, 500);
    }
}

//AJAX滚动加载部分
var $boxes = $(data); // data为数据
$grid.append($boxes).masonry("appended", $boxes, true);
//追加元素
$grid.imagesLoaded().done( function(instance) {                    isImgLoad(function () {                                            $grid.masonry();
    })
})

代码如上,当图片没有加载完成的时候,列表的图片就会重叠在一起。但我用网上搜来的判断图片加载的函数,好像没啥作用?用图片加载插件,CONSOLE.LOG显示都是加载完成,但图片还是会重叠。我不知道哪里出的问题,怎么样解决图片加载慢或网速慢的情况下能够保持不出现图片重叠的情况发生呢?实在搞不定了,还望大神帮忙解决!~非常感谢!~


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

masonry 不熟
提供两个解决方案的思路

1 如果图片显示没有顺序,可以打乱的
加载完成的 图片,才加进瀑布流,未加载完成的,不加入瀑布流

2 图片必须按照顺序,不能打乱
已加载完成的图片之前的所有图片都加载完了,才显示这个图片,否则为隐藏


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...