按位置识别并添加 HTML class 到砌体项目

Identify and add HTML class to masonry items by their position

我正在使用 Masonry 在两列中呈现一组项目。下面给出的是 HTML 结构。

<div id="grid">
 <article class="entry"> … </article>
 <article class="entry"> … </article>
 <article class="entry"> … </article>
 <!-- And so it goes -->
</div>

我想要实现的是确定哪一项在“左栏”中,哪一项在“右栏”中,并根据此添加 HTML class .我选择识别项目放置的方式是通过它们的位置属性,例如对于左侧的那些项目,它将等于“0”,同样编码了以下 JS。

var $grid = $('#grid');
$grid.imagesLoaded( function() {
    $grid.masonry({
    itemSelector: '.entry',
    percentPosition: true,
    columnWidth: 20,
    gutter: 25,
    isAnimated : false
  });
});
$("#grid .entry").each( function() {
    var position = $(this).position();
    if( position.left == 0) {
      $(this).addClass('left-column');
    } else {
      $(this).addClass('right-column');
   }
});

面临的问题是,每一项都被识别为位于左侧。你能描述一下有什么问题或建议任何替代方法吗?非常感谢您的帮助。

我创建了一个 JSfiddle,这里是 link https://jsfiddle.net/DhrubaRC/7441frh3/

谢谢!

根据 Masonry 的说法(Desandro 在这方面和 Isotope 方面做得非常出色):http://desandro.github.io/masonry/docs/methods.html#layout 布局方法接受第三个参数,即回调参数。

你可能想先统计匹配'entry'个元素的个数,然后调用Masonry函数,在回调中检查你所在的索引等于元素个数减1 (即,如果你已经完成了所有这些),当它完成时,调用 $('#grid .entry').each.... 代码。到那时,所有定位信息都应该已设置并按预期工作。