gpt4 book ai didi

angular - Angular 2+的 masonry 替代品

转载 作者:太空狗 更新时间:2023-10-29 18:24:27 25 4
gpt4 key购买 nike

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

那么,问题是,Angular 中有一个很好地集成到 Masonry 中的替代方案吗?谢谢!

最佳答案

我终于做到了!我根据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);
}

关于angular - Angular 2+的 masonry 替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48138956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com