jquery为div高度和宽度生成随机数

时间:2012-09-27 06:19:53

标签: jquery

我想使用div宽度和高度生成随机数。生成后,我将使用x和y位置放置静态文本,但文本不应该超过一圈。

这个函数会为我Math.floor ( Math.random ( ) );生成一个随机数,但是我想要n个数字,它总能让我保证文本不会相互重叠。

如何使用高度和宽度生成随机数?

2 个答案:

答案 0 :(得分:0)

x=Math.floor(Math.random()*1000);
y=Math.floor(Math.random()*1000);
$('#idoftextbox').val('X Position is '+x+' and Y Position is '+y);

答案 1 :(得分:0)

jsFiddle

这是您更新的代码,处理文本冲突;您需要根据文本修改碰撞容差距离(可能还有放弃前随机尝试的次数)。虽然理论上非常低效,但目前没有任何明显的性能问题,但您可以根据需要进行调整。

一个显而易见的性能提升是将坐标列表保持在排序顺序中。这样,在进行每次插入之前,您不必检查每个列表中的每个先前值,并且搜索要插入的正确索引将与检查冲突的过程相同。就此而言,您可以使用更好的搜索算法轻松地将isTooCloseO(n)更改为O(log n)

$(document).ready(function() {
    var z = 300, tops = [], lefts = [];

    for (var i = 0; i <= z; i++) {
        var x=0, y=0, j=0;
        while( isTooClose(x, y) && j < 50) {
            x = Math.floor(Math.random() * 500);
            y = Math.floor(Math.random() * 500);
            j++;
        }
        if (j>=50) { alert('1'); }
        $('<div>').css({
            position: "absolute",
            left: x,
            top: y,
            fontSize: 'small'
        }).html("Hello").appendTo('#test');
        lefts.push(x);
        tops.push(y);
    }

    function isTooClose( x, y ) {
        for (var i = 0; i < tops.length; i++) {
            if ( (x + 30 >= lefts[i] && x - 30 <= lefts[i]) &&
                 (y + 10 >= tops[i] && y - 10 <= tops[i]) ) {
                return true;
            }
        }
        return false;
    }
});