如何使用相同的类名每页多次使用Masonry?

时间:2016-08-04 11:07:30

标签: javascript jquery wordpress jquery-masonry

我需要每页有多个砌体网格。我使用wordpress循环生成代码,因此每个div容器都具有相同的类名。

有没有办法在所有具有相同名称的div容器上调用Masonry?

html

 <!--Masonry 1-->
<div class="print-slider">
    <div class="print-slider-sizer"></div>
    <div class="gutter-sizer"></div>
    <div class="print-slider-item"></div>
    <div class="print-slider-item"></div>
    <div class="print-slider-item"></div>
    <div class="print-slider-item"></div>
</div>

<!--Masonry 2-->
<div class="print-slider">
    <div class="print-slider-sizer"></div>
    <div class="gutter-sizer"></div>
    <div class="print-slider-item"></div>
    <div class="print-slider-item"></div>
    <div class="print-slider-item"></div>
    <div class="print-slider-item"></div>
</div>

JS

var grid = document.querySelector('.print-slider');
var msnry;

imagesLoaded( grid, function() {
  // init Isotope after all images have loaded
  msnry = new Masonry( grid, {
    itemSelector: '.print-slider-item',
    columnWidth: '.print-slider-sizer',
    gutter: '.gutter-sizer',
    percentPosition: true,
  });
});

这是问题的代码笔:

http://codepen.io/anon/pen/OXBrPb

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

使用document.querySelector('.print-slider'),您只能获得具有print-slider类的第一个html元素。这就是为什么只有第一块砖石被初始化的原因。

下面是您的代码调整,以便捕获所有.print-slider元素并分别初始化砌体。不同之处在于我按类名获取元素,然后循环遍历它们。我使用body作为imagesLoaded的选择器,因为我没有完整的html结构。我建议你将砌体包裹在一个div中并使用那个来检查图像是否已加载。或者,更好的是,在foreach内部进行初始化之前,分别检查每个砌体。

var elements = document.getElementsByClassName('print-slider');
var msnry;

imagesLoaded( document.querySelector('body'), function() {
  // init Isotope after all images have loaded
  var n = elements.length;
  for(var i = 0; i < n; i++){
    msnry = new Masonry( elements[i], {
      itemSelector: '.print-slider-item',
      columnWidth: '.print-slider-sizer',
      gutter: '.gutter-sizer',
      percentPosition: true,
    });
  }
});