javascript - 使用加载图像的砌体

标签 javascript css jquery-masonry

我是一个 js 新手,希望这个问题看起来不会太愚蠢。

我正在为我的网站使用砌体 - 工作正常。 我想让我的盒子在砌体完成加载时出现。在互联网上搜索我发现有几篇文章推荐使用 imagesloaded 插件来解决这个问题。它只是没有改变任何东西。这意味着:我的布局和内容框一直被弄乱,直到砌体完成加载,就在那时这些框突然跳到正确的位置。

我的代码:

$(document).ready(function() {

    var $container = $('#post-area');
    $container.imagesLoaded( function() {
        $container.masonry({
            itemSelector : '.box',
            columnwidth: 300,
            gutter: 20,
            isFitWidth: true,
            isAnimated: !Modernizr.csstransitions
        });    
    });
});

我也遇到了这个 Firebug 错误:

TypeError: EventEmitter is not a constructor
ImagesLoaded.prototype = new EventEmitter();

我在我的网站末尾像这样加载 imagesloaded js(如果 imagesloaded 已经包含在砌体中,我找不到任何信息,有些人写道它不再包含 - 令人困惑):

<script src="http://www.domainname.com/js/imagesloaded.js"></script>

如果有人能帮助我,我会很高兴。并告诉我 imagesloaded 是否是解决此问题的正确插件!

最佳答案

imagesLoaded 不包含在 Masonry 中,因此您应该使用单独的 plugin .我建议使用已编译的 .min 版本。

关于堆叠图像的问题:问题不在 imagesLoaded 中,也不在 Masonry 中。 在您的代码中, imagesLoaded 正在等待所有图像加载完毕,然后触发砌体。加载所有图像后,Masonry 插件可以正确定义它们的大小并放在网格上。在此之前,浏览器像往常一样加载图像并根据定义的 CSS 显示它们,这就是它们困惑的原因。

一种可能的解决方案是默认隐藏元素,然后在 imagesLoaded 确认图像加载时淡入:

$(document).ready(function() {

  var $boxes = $('.box');
  $boxes.hide();

  var $container = $('#post-area');
  $container.imagesLoaded( function() {
    $boxes.fadeIn();

    $container.masonry({
        itemSelector : '.box',
        columnwidth: 300,
        gutter: 20,
        isFitWidth: true,
        isAnimated: !Modernizr.csstransitions
    });    
  });
});

关于javascript - 使用加载图像的砌体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20542309/

相关文章:

javascript - 关闭模态时位置标记消失

javascript - Ember 组件和依赖注入(inject)

jQuery Masonry 动态标题宽度

jquery - 旋转网格时,Packery/Masonry 不支持邮票元素

javascript - jQuery:单击时禁用单击事件,直到来自 ajax 调用的响应

javascript - 如何在 javascript 计算器中检测和存储操作符前后的数字?

HTML 位置 :relative

jquery - CSS 下拉菜单、z-index、iframe 有问题吗?

javascript - Ajax 请求成功,但无论如何都会继续到目标 url

javascript - 节点展开后树的位置