Angular 2+的砌体替代品

时间:2018-01-07 16:03:26

标签: angular masonry angular-masonry

我在angular2-masonry项目中使用最新的Angular版本(v5.1.3)我正在寻找砌体和其他替代方案来实现我的应用程序。我尝试了多个,我不喜欢实现。我尝试做一个原生的CSS砌体,但我需要从左到右订购内容。

所以,问题是,在Angular和Masonry中有一个完整的替代方案吗?谢谢!

1 个答案:

答案 0 :(得分:3)

最后我做到了!我已根据Andy Barefoot提供的解决方案实施了解决方案,可以检查in this CodePen。我创建了a Gist,展示了我在Angular应用中如何实现它。诀窍在于CSS和JS:

enter image description here

<强> 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);
}