Angular 2+ 的砌体替代方案

Masonry alternative for Angular 2+

我在一个项目中与 angular2-masonry 合作,该项目具有最新的 Angular 版本 (v5.1.3) 我一直在寻找 Masonry 和其他替代方案以在我的应用程序中实施。我尝试了多个,但我不喜欢它的实现。我尝试做原生 CSS 砌体,但我需要从左到右排列内容。

所以,问题是,在 Angular 中有一个很好地集成到 Masonry 中的替代方法吗?谢谢!

我终于做到了!我已经根据 Andy Barefoot, can be checked in this CodePen. I have created a Gist 给出的解决方案实现了一个解决方案,展示了我是如何在我的 Angular 应用程序中实现它的。诀窍在于 CSS 和 JS:

CSS:

.grid {
  display: grid;
  grid-gap: 10px;
  grid-template-columns: repeat(auto-fill, minmax(250px,1fr));
  grid-auto-rows: 20px;
}

JS:

function resizeGridItem(item){
  grid = document.getElementsByClassName("grid")[0];
  rowHeight = parseInt(window.getComputedStyle(grid).getPropertyValue('grid-auto-rows'));
  rowGap = parseInt(window.getComputedStyle(grid).getPropertyValue('grid-row-gap'));
  rowSpan = Math.ceil((item.querySelector('.content').getBoundingClientRect().height+rowGap)/(rowHeight+rowGap));
    item.style.gridRowEnd = "span "+rowSpan;
}

function resizeAllGridItems(){
  allItems = document.getElementsByClassName("item");
  for(x=0;x<allItems.length;x++){
    resizeGridItem(allItems[x]);
  }
}

function resizeInstance(instance){
    item = instance.elements[0];
  resizeGridItem(item);
}

window.onload = resizeAllGridItems();
window.addEventListener("resize", resizeAllGridItems);

allItems = document.getElementsByClassName("item");
for(x=0;x<allItems.length;x++){
  imagesLoaded( allItems[x], resizeInstance);
}