1

我想制作一个类似 Pinterest 风格的页面,每个块都可能改变高度,我希望它们只在其列中重新排列。

例如,当页面加载时,布局可能是:

------------------------------------
|         |                |       |
|         |                |       |
|---------|                |       |
|Hello! I |                |       |
|am Alice.|----------------|       |
|---------|                |       |
|WoW!     |                |       |

如果用户单击一个块,它的高度会发生变化,理想情况下应该是这样的:

------------------------------------
|         |                |       |
|         |                |       |
|---------|                |       |
|Hello! I |                |       |
|am Alice.|----------------|       |
|Who are  |                |       |
|you?     |                |       |
|---------|                |       |
|WoW!     |                |       |

我已经尝试过MasonryShapeShift,它们的行为相似。默认情况下,某些块的高度发生变化时,所有块的位置都不会改变。所以Who are you?会在下面WoW!,它仍然看起来像:

------------------------------------
|         |                |       |
|         |                |       |
|---------|                |       |
|Hello! I |                |       |
|am Alice.|----------------|       |
|---------|                |       |
|WoW!     |                |       |

我可以手动调用一个函数来重新排列它们(例如:$('.container').trigger("ss-rearrange");对于 ShapeShift),但块可能被排列到不同的列,这并不理想。

我想知道是否有图书馆或者我应该如何实现这一目标?当高度变化时,我需要块仅在其当前列中移动。

4

1 回答 1

0

(1)查看砌体的文档:

var container = document.querySelector('#layout-demo .masonry');
var msnry = new Masonry( container, {
  columnWidth: 60
});

eventie.bind( container, 'click', function( event ) {
  // don't proceed if item was not clicked on
  if ( !classie.has( event.target, 'item' ) ) {
    return;
  }
  // change size of item via class
  classie.toggle( event.target, 'gigante' );
  // trigger layout
  msnry.layout();
});

msnry.layout()是您想要做的。

来源: http: //masonry.desandro.com/methods.html

见codepen:http ://codepen.io/johannesjo/pen/kFixz

(2)您也可以尝试使用css-columnshttp ://www.webdesignerdepot.com/2013/03/how-to-use-css3-columns/

(3)如果你不想像 masonry 或 css-columns 那样改变列,你应该可以使用简单的浮动容器。不过,您必须自己对内容进行排序。在您的情况下,它可能是最好的解决方案,因为所有其他方法都应该根据元素的大小重新评估元素的位置。

(4)如果您不介意重叠元素,您可以使用砖石单元并在内部切换隐藏的 div(显示:无)。如果不调用 layout() 元素将保持其位置,就像您在问题中描述的那样。

于 2013-11-12T01:51:00.643 回答