javascript - 循环遍历项目数组以查看前一个项目的高度是否更高
问题描述
我有一个 2x2 网格,我试图根据其中一个的高度是否大于另一个来设置最小高度。这样左右两边的高度相同。我在这里寻找CSS只是js。
我在调整大小事件中有这个。
const updateSize = () => {
const group = Array.from(document.querySelectorAll('.items'));
const heights = group.map(item => item.clientHeight);
group.forEach((item, index) => {
const count = index % 2;
if (count === 1) {
const h = heights[index - 1];
item.style.minHeight = `${h}px`;
}
});
};
上述方法有效,但唯一的问题是它只检查最后一项,如果当前项目的高度大于第一个项目,它将不起作用。我需要一种方法来检查最后一个并更新相应的项目。
这是布局。请注意,底部的灰色框未对齐:
body {
background: #20262E;
font-family: Helvetica;
width: 100%;
}
.component {
width: 100%;
}
.grid {
display: grid;
width: 100%;
grid-template-columns: repeat(2, 50%);
}
.item {
border: 1px solid green;
display: flex;
flex-direction: column;
justify-content: space-between;
}
.images-collection {
display: flex;
flex-wrap: wrap;
justify-content: center;
}
.image {
width: 100px;
height: 100px;
border: 1px solid white;
}
.textWrapper {
border: 1px solid blue;
display: flex;
justify-content: center;
align-content: flex-end;
background-color: gray;
}
.text {
text-align: center;
color: white;
width: 300px;
}
<div class="component">
<div class="grid">
<div class="item">
<div class="images-collection">
<div class="image"></div>
<div class="image"></div>
<div class="image"></div>
<div class="image"></div>
<div class="image"></div>
<div class="image"></div>
<div class="image"></div>
<div class="image"></div>
<div class="image"></div>
<div class="image"></div>
</div>
<div class="textWrapper">
<div class="text">
<p>This is my title</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Lorem ipsum dolor sit amet,</p>
</div>
</div>
</div>
<div class="item">
<div class="images-collection">
<div class="image"></div>
</div>
<div class="textWrapper">
<div class="text">
<p>This is my title</p>
<p>Lorem ipsum dolor sit amet.</p>
</div>
</div>
</div>
</div>
</div>
解决方案
尝试:
const updateSize = () => {
const Allitem = document.querySelectorAll('.item')
, MaxHeight = 0
Allitem.forEach(item=>{ item.style.minHeight = '' }) // remove values
MaxHeight = Array.from(Allitem).reduce((a,c)=>a<c.clientHeight?c.clientHeight:a,0)
Allitem.forEach(item=>{ item.style.minHeight = `${MaxHeight}px` })
}
对于只有同一行的单元格必须具有相同高度的情况:
const updateSize = () => {
const Allitems = document.querySelectorAll('.item')
let ItemsOnLine = []
, topPos = -99999
, MaxHeight = 0
const setHeights = h => ItemsOnLine.forEach(item=>{ item.style.minHeight = `${h}px` })
Allitems.forEach(item=>{ item.style.minHeight = '' }) // remove values
Allitems.forEach(item=>{
if (item.offsetTop != topPos)
{
setHeights(MaxHeight)
MaxHeight = 0
ItemsOnLine.length = 0
topPos = item.offsetTop
}
MaxHeight = Math.max(MaxHeight, item.clientHeight )
ItemsOnLine.push( item )
})
setHeights(MaxHeight)
}
推荐阅读
- java - ThreadPoolTaskExecutor,池中只有一个线程,不处理来自 AWS 队列的消息
- apache-kafka - 如果Kafka生产者尝试发送消息的分区离线,生产者可以尝试发送到不同的分区吗?
- javascript - 在 JavaScript 中切换 css 时如何添加淡入淡出效果
- c++ - 我需要用 Protobuf 存储长度信息吗?
- react-native - 如何在 React Native 中定位 Pixel 3a 以修复阻止汉堡菜单图标的前置摄像头?
- python - 对于 Pandas,groupby 聚合不能按预期工作
- c++ - 为什么“CLSIDFromProgID”在某些情况下不起作用?
- r - 如何从 R 中的固定宽度字符向量输入中创建具有单独列的 DataFrame?
- postgresql - pg_dump:由于 openproject 上的服务器版本不匹配而中止
- javascript - 为什么我需要将 setState 回调包装在匿名箭头函数中以使其在状态更改后运行?