Массив со случайными позициями - PullRequest
0 голосов
/ 19 октября 2011

У меня проблема со случайными позициями.Я делаю сценарий, который устанавливает <li> случайных на странице.Вы можете увидеть это здесь: Нажмите здесь

Но проблема в том.Что предметы перекрываются.Я хочу сделать этот скрипт с массивом.Я хотел бы массив с фиксированными позициями.Там всегда 8 предметов.И все эти восемь предметов имеют одну фиксированную позицию.

Как я могу это сделать?Как мне сделать массив с фиксированными позициями?

Вот мой код:

var images = [];

function init() {
    $('.friend-selection li > div').each(function(){

        var id = this.id;
        var img = $('#img_' + id);
        var randomTop = 400*Math.random(); //random top position
        var randomLeft = 500*Math.random()+1; //random left position

        $("#parent_" + id).css({ //apply the position to parent divs
            top     : randomTop,
            left    : randomLeft
        });
    });
};

init(); 

Ответы [ 2 ]

0 голосов
/ 19 октября 2011

Я предполагаю, что у вас есть набор из 8 фиксированных неперекрывающихся позиций, которые вы хотели бы использовать случайным и уникальным образом:

var images = [];

// Constructor for the "Position" structure
function Position(left, top) {
    this.left=left;
    this.top=top;
}

// sortFunction routine to help randomize array
function rand(ar){
    return 0.5-Math.random();
}

// Array containing the 8 positions you want to use
var positionArray = [
      new Position(0,  0) 
    , new Position(50, 50) 
    , new Position(100,100) 
    , new Position(150,150) 
    , new Position(200,200) 
    , new Position(250,250) 
    , new Position(300,300) 
    , new Position(350,350) 
];

function init() {
    $('.friend-selection li > div').each(function(){

        var id = this.id;
        var img = $('#img_' + id);
        var imageIndex = parseInt(id.substring(id.length - 1)); // This is a hack because you're using "picture*" as the id

        $("#parent_" + id).css({ //apply the position to parent divs
            top     : positionArray[imageIndex].top,
            left    : positionArray[imageIndex].left
        });
    });
};


// Randomize array - http://stackoverflow.com/questions/7802661
positionArray.sort(rand);

init(); 
0 голосов
/ 19 октября 2011

Расположите элементы в массиве последовательно, чтобы вы не могли перезаписать уже заполненные позиции, и используйте Shuffle для перемешивания массива в случайном порядке.

Но поскольку в Javascript такой функции нет, вам придется написать ее самостоятельно. Нечто подобное будет работать.

shuffle = function(o){
    for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
    return o;
};


alert(shuffle([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]));

http://jsfiddle.net/uxnn7/

...