【发布时间】:2015-02-28 05:41:10
【问题描述】:
所有 div 都像我需要的那样“随机”放置,但它们偶尔会重叠。 这只是一个机会问题。我怎样才能防止这种情况发生? (理想情况下,我可以设置它们之间的最小距离)
我可以通过进一步开发当前的 javascript 来实现这一点吗? 我需要考虑完全不同的方法吗?
老实说,我不知道如何解决这个问题。 任何指导将不胜感激。 谢谢。
html
<div id="box1" class="boxes">
<div id="text1"> Lorem Ipsum Dolor Sit Amet </div>
</div>
<div id="box2" class="boxes">
<div id="text2"> Lorem Ipsum Dolor Sit Amet </div>
</div>
<div id="box3" class="boxes">
<div id="text3"> Lorem Ipsum Dolor Sit Amet </div>
</div>
<div id="box4" class="boxes">
<div id="text4"> Lorem Ipsum Dolor Sit Amet </div>
</div>
css
.boxes {
position: absolute;
}
#text1 {
color: white;
font-family: "Times", Times New Roman, serif;
font-size: 16px;
font-weight: bold;
line-height: 24px;
background-color: black;
}
#text2 {
color: white;
font-family: "Times", Times New Roman, serif;
font-size: 16px;
font-weight: bold;
line-height: 24px;
background-color: blue;
}
#text3 {
color: white;
font-family: "Times", Times New Roman, serif;
font-size: 16px;
font-weight: bold;
line-height: 24px;
background-color: green;
}
#text4 {
color: white;
font-family: "Times", Times New Roman, serif;
font-size: 16px;
font-weight: bold;
line-height: 24px;
background-color: red;
}
javascript
function setRandomPos(elements,x,dx){
elements.each(function(){
fixLeft=(Math.floor(Math.random()*x)*10) + dx;
fixTop = (Math.floor(Math.random()*40)*10) + 180;
$(this).offset({
left: fixLeft,
top: fixTop
});
});
}
setRandomPos($(".boxes"),40,40);
【问题讨论】:
-
没有什么神奇的方法可以阻止这种情况的发生。您必须更改 setRandomPos 元素,以便在随机放置每个元素之前,它需要检查所有其他元素的位置,并检查新的随机位置是否与其中任何一个重叠。请参阅此处了解检查两个 div 是否重叠的方法:stackoverflow.com/questions/14012766/…
-
@HaukurHaf 即使它有效,它仍然允许他们触摸,对吧?我需要他们不要互相接触。
-
那么你只需要在碰撞检查中添加几个像素就可以让其中一个div看起来更大一点。
-
@HaukurHaf 就是这样!问题是看代码,我认为我自己无法实现。我是 js 新手……你能帮帮我吗?