【问题标题】:Masonry and overlapping divs砌体和重叠 div
【发布时间】:2016-01-15 18:55:14
【问题描述】:

我一直在绞尽脑汁想弄清楚这一点。我正在使用 AJAX 调用来填充 div 内容(包含本地存储的图像和文本的 div)。 ajax 调用成功执行,但第二行的 div 与第一行的部分重叠。

这是我一直在使用的脚本:

var $allF = $('#allItems');

$(document).ready(function () {

    $allF.imagesLoaded(function () {
        $allF.masonry({
            itemSelector: '.box',
            isAnimated: true,
            animationOptions: {
                duration: 500,
                easing: 'linear',
                queue: false
            },
            isFitWidth: true,
            columnWidth: 10
        });
    });

    loadAllItems();

});

function loadAllItems() {
    $.ajax({
        url: '/Ajax/LoadAllItems',
        type: 'POST',
        dataType: 'json',
        data: { skip: (pageIndex * pageSize), take: pageSize },
        success: function (posts) {
            var items = '';
            $.each(posts, function(p, post) {
                items += 'html removed to keep post short';
            });

            var $itemBlock = $(items);
            $allF.append($itemBlock);
            $allF.masonry('appended', $itemBlock);
        },
        error: function (xhr, ajaxOptions, thrownError) {
            console.log(xhr.status);
            console.log(xhr.responseText);
            console.log(thrownError);
        }
    });
}

所有内容项的宽度都相同,均为 130 像素,但每个项目的高度可能相差 20 到 30 像素。有什么我错过的吗?我已经尝试了砖石网站上的问答,但无济于事。

任何帮助将不胜感激。

谢谢!

【问题讨论】:

  • 很可能您遇到了这个问题,因为刷新砌体时没有加载图像,您应该在图像完全加载后重新加载砌体。使用github.com/desandro/imagesloaded那个
  • @SaqibAmin 感谢您的评论 - 我会在这里测试一下。一个问题,jquery.masonry.min.js 似乎包含 imagesLoaded 的定义 - 这与您的建议有什么区别?
  • 没有区别,你的包已经包含了imagesloaded库,你不需要再次加载。

标签: jquery css ajax jquery-masonry masonry


【解决方案1】:

像下面这样编写你的 Ajax 函数:

function loadAllItems() {
    $.ajax({
        url: '/Ajax/LoadAllItems',
        type: 'POST',
        dataType: 'json',
        data: { skip: (pageIndex * pageSize), take: pageSize },
        success: function (posts) {
            var items = '';
            $.each(posts, function(p, post) {
                items += 'html removed to keep post short';
            });

            var $itemBlock = $(items);
            $allF.append($itemBlock);
            $allF.imagesLoaded(function () {
                $allF.masonry('appended', $itemBlock);
            });
        },
        error: function (xhr, ajaxOptions, thrownError) {
            console.log(xhr.status);
            console.log(xhr.responseText);
            console.log(thrownError);
        }
    });
}

【讨论】:

  • 感谢您的帮助。虽然,我需要额外的$allF.masonry('appended', $itemBlock); imagesLoaded 检查后?我已将其删除,并且似乎可以正常工作。再次感谢。
  • 对不起,我错误地离开了那条线。删除那个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-21
相关资源
最近更新 更多