Javascript 随机定位的 Div 不重叠

标签 javascript html jquery random overlap

我一直在研究一个随机的概念想法,即在一个页面上出现 6 朵云,并从数据库中提取随机评论。这部分很简单,但是我发现要确保 6 朵云不相互重叠非常困难。我仔细研究了碰撞检测,发现在将新的“随机定位”div 放置在页面上之前,没有真正合适的方法来检查 X 或 Y 范围内的 DIV。我的代码在下面,我知道现在非常困惑。我目前用它检查最后一个 DIV 并取得了合理的成功,但是如果 DIV 1 和 DIV 3 例如具有相似的 X Y 位置,那么这是一个问题。对不起,如果我没有任何意义..这是我的代码和一个 jsFiddle

$(document).ready(function () {
var counter = 0;
//var colide = {};
var px = 0;
var py = 0;

var clouds = new Array("cloud1", "cloud2", "cloud3", "cloud4", "cloud5", "cloud6");
var cloudtext = new Array("This is text for cloud 1 :D", "This is text for cloud 2 :D", "This is text for cloud 3 :D", "This is text for cloud 4 :D", "This is text for cloud 5 :D", "This is text for cloud 6 :D");

function makeDiv() {
    if (counter < 6) {
        counter++;

        //var divsize = ((Math.random() * 100) + 50).toFixed();
        //var color = '#' + Math.round(0xffffff * Math.random()).toString(16);
        $newdiv = $('<div class="' + clouds[counter - 1] + '">' + cloudtext[counter - 1] + '<div/>').css({

            'width': '354px',
                'height': '202px'

            //'width': divsize + 'px',
            //'height': divsize + 'px',
            //'background-color': color,
        });

        var posx = (Math.random() * ($(document).width() - 354)).toFixed();
        var posy = (Math.random() * ($(document).height() - 202)).toFixed();

        while (posy < 180) {
            posy = (Math.random() * ($(document).height() - 202)).toFixed();
        }


        if ((px > posx + 354) || (px < posx - 354)) {
            if ((py > posy + 202) || (py < posy - 202)) {


                //alert(px + ' - ' + posx + ' px(temp) - posx(newdiv) - good to go!');
                py = posy;
                px = posx;
                $newdiv.css({
                    'position': 'absolute',
                        'left': posx + 'px',
                        'top': posy + 'px',
                        'display': 'none',
                        'background-image': 'url(http://www.demixgaming.co.uk/cloud/images/Cloud.png)',
                        'text-align': 'center',
                        'line-height': '202px',
                        'color': '#000'
                }).appendTo('body').fadeIn(150).delay(300, function () {
                    makeDiv();
                });
            } else {
                counter--;
                px = posx;
                py = posy;
                makeDiv();
            }
        } else {
            counter--;
            px = posx;
            py = posy;
            makeDiv();
        };

    }
}
makeDiv();

});

JS fiddle - Link to JSFiddle

最佳答案

算法看起来像这样;虽然我可能犯了一个错误

  1. 获取文档的高度和宽度y = docH, x = docW
  2. 减去 <div>的高度和宽度,y = y - divH, x = x - divH
  3. 0..x, 0..y 之间选择随机坐标 curX, curY
  4. newX = curX, newY = curY
  5. 对于之前的每个 <div>
    1. 调用它的信息 prevX, prevY, prevW, prevH
    2. 如果 prevX < curXnewX = newX + prevW
    3. 如果 prevY < curYnewY = newY + prevH
  6. 追加<div>newX, newY
  7. 保存 <div>信息 curX, curY, divW, divH
  8. 如果还有一个<div> ,转到第 2 步。

关于Javascript 随机定位的 Div 不重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18060831/

相关文章:

javascript - 我如何在 Angular js 中将 64 位 HTML 文件显示到 iframe 中

javascript - 如何仅在鼠标悬停监听器未激活时执行函数

javascript - 如何在需要时突出显示替代隐藏复选框输入的复选框伪元素

窗口/选项卡之间的 javascript/jquery 内存空间

jquery - 从父元素中删除类

javascript - 根据另一个输入值隐藏输入

javascript - 如何使用 mongoDB 和 Node.js 从集合中获取所有文档

php - 删除子标记名称不是值

javascript - X秒后Jquery自动触发点击

javascript - 如何有一个不在滚动对象旁边的滚动条?