我正在使用angular2-masonry
最新 Angular 版本(v5.1.3)的项目中工作,我一直在寻找 Masonry 和其他替代方案来在我的应用程序中实现。我尝试了多个,但我不喜欢实施。我尝试做一个原生 CSS 砌体,但我需要从左到右排序内容。
所以,问题是,在 Angular 中与 Masonry 有一个很好的集成方式吗?谢谢!
我正在使用angular2-masonry
最新 Angular 版本(v5.1.3)的项目中工作,我一直在寻找 Masonry 和其他替代方案来在我的应用程序中实现。我尝试了多个,但我不喜欢实施。我尝试做一个原生 CSS 砌体,但我需要从左到右排序内容。
所以,问题是,在 Angular 中与 Masonry 有一个很好的集成方式吗?谢谢!
终于我做到了!我已经根据Andy Barefoot给出的解决方案实现了一个解决方案,可以在这个 CodePen中进行检查。我创建了一个 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);
}