【问题标题】:Cannot initialize Masonry with JQuery无法使用 JQuery 初始化砌体
【发布时间】:2015-02-21 19:02:21
【问题描述】:

根据official documentation 有不同的方法来初始化砌体容器。 HTML 初始化工作正常,但是当我尝试将参数从 data-masonry 属性移动到 JQuery 时,事情就中断了。

这里是带有 JSON 参数的 HTML 初始化。

<div id="container" class="masonry js-masonry"  data-masonry-options='{ "columnWidth": ".grid-sizer", "itemSelector": ".item", "isFitWidth": true }'>

当我将它们移到我的 js/JQuery 文件时,这就是它目前的样子:

var $container = $('#container');
// initialize
$container.masonry({
  columnWidth: '.grid-sizer',
  itemSelector: '.item',
  isFitWidth: true
});

使用后一个版本,grid-sizer 元素变为可见,当然不应该出现。

我在官方文档中没有看到关于何时需要在 JQuery 中调用初始化代码的规范。是 $(document).ready 我可以在哪里调用它吗?

JSFIDDLE 布局损坏:http://jsfiddle.net/1f1kwfbd/10/

【问题讨论】:

  • 是的,您在页面加载后在 $(document).ready 函数中调用它。
  • @Jackson 不幸的是,我得到了一个破碎的砖石网格。我已经更新了我的问题并添加了一个 jsfiddle。
  • 您需要在 jsfiddle 中将砌体作为外部资源加载!使用CDN 不加载它就无法工作!你的 gird sizer 里面不应该有内容:&lt;div class="grid-sizer"&gt;&lt;/div&gt; 并且它需要有自己的 css 规则,而不是链接到你的 .item css,就像这样:.grid-sizer { width: 33.33333%; }。先解决这个问题。

标签: jquery jquery-masonry masonry


【解决方案1】:

我在官方文档中没有看到关于何时需要的规范 在 JQuery 中调用初始化代码。是 $(document).ready 我在哪里可以调用它?

所以你可以随时调用它。

最快的方法确实是在 document.ready 上——这会在页面加载后立即触发,例如

$( document ).ready(function() {
    var $container = $('#container');
    // initialize
    $container.masonry({
      columnWidth: '.grid-sizer',
      itemSelector: '.item',
      isFitWidth: true
    });
});

或者,您可以将砌体代码封装在一个函数中,然后选择在以后调用它。例如

// Declare your function
function initMasonry() {
    var $container = $('#container');
    // initialize
    $container.masonry({
      columnWidth: '.grid-sizer',
      itemSelector: '.item',
      isFitWidth: true
    });
}

要调用函数,只需像这样调用它:

initMasonry();

更新

阅读有关砌体的文档后,您需要创建一个新的砌体对象,而不是在 jQuery 选择器上初始化砌体对象。

示例代码:

$(document).ready(function() {

    var container = document.querySelector('#container');
    var msnry = new Masonry( container, {
        columnWidth: '.grid-sizer',
        itemSelector: '.item',
        isFitWidth: true
    });

});

更新小提琴:http://jsfiddle.net/pjbq4gj6/

参考文档:http://masonry.desandro.com/#javascript

【讨论】:

  • 与我目前正在使用的代码完全相同,但 .grid-sizer div 是可见的,并且在调整窗口大小时会发生重叠。见我的 jsfiddle:jsfiddle.net/1f1kwfbd/1
  • 我没有编造这个元素,DeSandro 的文档也使用了它,例如这个代码笔:codepen.io/desandro/pen/JFpeg CSS 不会隐藏它。
  • @DrunkenMaster 我在你的小提琴中看不到任何将 grid-sizer 元素设置为不显示的东西。还有这个元素的目的是什么?
  • 嗯,未修复,因为您的网格大小仍然显示。请参阅我上面关于 grid-sizer 的 css 的评论,并查看更新后的 fiddle 修复了 grid-sizer 问题。
  • @Macsupport 我也注意到了这一点——很好发现。我认为这应该可以解决所有问题。赞成:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-05
  • 1970-01-01
相关资源
最近更新 更多