#javascript #random
#javascript #Случайный
Вопрос:
Я случайным образом размещаю изображения на холсте в javascript. Проблема в том, что я хочу минимизировать стекирование, но не предотвращать его. Я хотел бы видеть поведение, при котором, если изображений достаточно, чтобы поместиться на холсте без перекрытия, они не будут. Однако я хочу, чтобы изображения не выглядели упорядоченными. Есть идеи?
Комментарии:
1. Вы проверяли jQuery? Есть несколько плагинов, которые помогут вам
2. Я использую jQuery, но я не знаком с каким-либо плагином для этого
Ответ №1:
Вы могли бы разместить их равномерно, а затем случайным образом переместить их немного … что-то вроде этого:
var w = 200, h = 150, leftOffset = 60, topOffset = 30, leftDeviation = 90, topDeviation = 60
for(i=0;i<5;i )
$('<div />').css({
left:(i*w leftOffset Math.round(Math.random()*leftDeviation)),
top:(topOffset Math.round(Math.random()*topDeviation)),
opacity:.6,width:w,height:h,backgroundColor:'red',position: 'absolute'}).appendTo('body')
Демонстрация здесь: http://jsfiddle.net/y2hdE /
Это включает в себя макет сетки: http://jsfiddle.net/y2hdE/1 /
После того, как вы разместили все изображения, используя формулу, аналогичную моей, вы можете случайным образом выбрать, в какое место попадает фотография, поэтому все позиции заранее определены, но порядок случайный.
Комментарии:
1. основная проблема с равномерным размещением заключается в том, что оно не поддерживает неограниченное количество элементов, другая проблема заключается в том, что оно не позволяет изображению красиво перекрываться с двумя другими
Ответ №2:
Как далеко вы продвинулись в своем подходе? Вы говорите, что можете, но не хотите предотвращать укладку. Почему бы вам не использовать свой алгоритм, добавить предотвращение и сделать некоторые исключения на основе случайного числа?
Ответ №3:
В итоге я выбрал инвертированное нормальное распределение, которое, вероятно, оставит пространство в центре, чтобы можно было просматривать изображения, в то время как изображения снаружи, скорее всего, будут сложены.