javascript - jQuery Isotope 在 fitColumns 布局模式下不对齐大宽度元素

标签 javascript jquery css jquery-isotope

我正在使用 Jquery 同位素

我有一个元素宽度大于其他 div。所有元素都对齐良好,但元素在大宽度元素下未正确对齐。

http://jsfiddle.net/S5vAG/1381/

<div id="container">
  <div class="item">1</div>
  <div class="item large">2</div>
  <div class="item">3</div>
  <div class="item">4</div>
  <div class="item">5</div>
  <div class="item">6</div>
  <div class="item">7</div>
</div>

$(function(){
  var $container = $('#container'),
      $items = $('.item');

  $container.isotope({
    itemSelector: '.item',
    layoutMode : 'fitColumns',
    resizesContainer : true,
    getSortData : {
      fitOrder : function( $item ) {
        var order,
            index = $item.index();

        if ( $item.hasClass('large') && index % 2 ) {
          order = index + 1.5;
        } else {
          order = index;
        }
        return order;
      }
    },
    sortBy : 'fitOrder'
  });

  $items.click(function(){
    var $this = $(this);
    // nothing to change if this already has large class
    if ( $this.hasClass('large') ) {
      return;
    }
    var $previousLargeItem = $items.filter('.large');

    $previousLargeItem.removeClass('large');
    $this.addClass('large');
    $container
      // update sort data on changed items
      .isotope('updateSortData', $this )
      .isotope('updateSortData', $previousLargeItem )
      // trigger layout and sort
      .isotope();
  });
});

谁能解释一下为什么会这样,或者请给我一个更好的解决方案。

最佳答案

基本上,它之所以如此,是因为 fitColumns 选项所做的;无论所排列元素的大小如何,这些元素都排列在垂直列中。

要更好地了解可用的布局选项以及它们在不同尺寸的元素中的外观,请查看此 Working Example .

听起来您可能想尝试 layoutMode: 'masonryHorizo​​ntal'

Working Example using masonryHorizontal

$(function(){
  var $container = $('#container'),
      $items = $('.item');

  $container.isotope({
    itemSelector: '.item',
    layoutMode : 'masonryHorizontal',   // Important Bit
    resizesContainer : true,
    getSortData : {
      fitOrder : function( $item ) {
        var order,
            index = $item.index();

        if ( $item.hasClass('large') && index % 2 ) {
          order = index + 1.5;
        } else {
          order = index;
        }
        return order;
      }
    },
    sortBy : 'fitOrder'
  });

  $items.click(function(){
    var $this = $(this);
    // nothing to change if this already has large class
    if ( $this.hasClass('large') ) {
      return;
    }
    var $previousLargeItem = $items.filter('.large');

    $previousLargeItem.removeClass('large');
    $this.addClass('large');
    $container
      // update sort data on changed items
      .isotope('updateSortData', $this )
      .isotope('updateSortData', $previousLargeItem )
      // trigger layout and sort
      .isotope();
  });
});

请注意,在示例中,我更改了 .items.large 的宽度,使其看起来均匀。

关于javascript - jQuery Isotope 在 fitColumns 布局模式下不对齐大宽度元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18272040/

相关文章:

javascript - Chrome 扩展 - jquery 关闭模态弹出窗口

html - 我如何强制图像在 Bootstrap 中坚持到它下面的 div 直到 768px

css - 在 Less 混合中使用 &

Javascript 动态添加 cdata 部分?

javascript - window.open() 没有以我传递给它的高度打开

javascript - 将点击处理程序与 CSS 兄弟选择器组合时 IE 中的奇怪行为

javascript - 数学游戏 JQuery/JavaScript

javascript - 在选择器上调用 jQuery 函数

JQuery 数据表分页样式

javascript - 删除后 jQuery 不附加代码