У меня есть коллекция div, которые генерируются, позиционируются абсолютно и корректируются по размеру с помощью JavaScript на основе начальных и конечных значений.
var posts = [
{
start: 50,
end: 200,
text: "Lorem ipsum"
},
{
start: 280,
end: 350,
text: "dolor"
},
{
start: 140,
end: 300,
text: "sit amet"
},
{
start: 440,
end: 590,
text: "consectetur"
},
{
start: 460,
end: 570,
text: "adipiscing"
},
{
start: 480,
end: 550,
text: "elit"
},
];
$.each(posts, function(i, post){
var obj = $("<div />");
obj.css({
left: post.start,
width: post.end - post.start
})
obj.text(post.text);
obj.appendTo("#timeline");
})
body {
font-family: Montserrat, Arial, sans-serif;
}
.timeline {
margin: 20px 0;
border-top: 1px solid #ccc;
border-bottom: 1px solid #ccc;
position: relative;
height: 60px;
}
.timeline div {
display: flex;
justify-content: center;
align-items: center;
position: absolute;
height: 50px;
top: 5px;
background: darkblue;
color: #fff;
border-radius: 6px;
padding: 0 10px;
box-shadow: 0 0 0 2px #fff;
}
h1 {
font-size: 18px;
text-transform: uppercase;
color: #999;
font-weight: 400;
letter-spacing: 0.05em;
margin: 50px 0 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1>Current</h1>
<div id="timeline" class="timeline"></div>
<h1>Ideal</h1>
<!-- Height of the timeline adjusted to make room -->
<div class="timeline" style="height: 170px">
<div style="left: 50px; width: 150px;">Lorem ipsum</div>
<!-- This one not moved down because
there is still room for it in the
original position -->
<div style="left: 280px; width: 70px;">dolor</div>
<!-- Element moved down to
since it overlaps two previous ones -->
<div style="left: 140px; width: 160px; top: 60px;">sit amet</div>
<div style="left: 440px; width: 150px;">consectetur</div>
<!-- Element moved down -->
<div style="left: 460px; width: 110px; top: 60px;">adipiscing</div>
<!-- Element moved down even further -->
<div style="left: 480px; width: 70px; top: 115px;">elit</div>
</div>
Однако, если два или более из этих div имеют перекрывающиеся начальные и конечные значения, сгенерированные div также будут перекрываться.В идеале я хотел бы рассчитать, какие div будут перекрываться, и добавить значение top
, чтобы каждый div был полностью видимым.Элемент с большим значением start
должен быть тем, который перемещается вниз.
Как я могу выяснить, какие элементы перекрываются, чтобы я мог переместить их на одну или две ступеньки ниже?