Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   поправить код (https://javascript.ru/forum/misc/41892-popravit-kod.html)

Arramis 03.10.2013 12:32

поправить код
 
здравстуйте господа.
Есть код который создает некоторое кол-во блоков внутри одного блока и распологает их отсортированно друг за другом (смотри выполнение).
<table>
	<tr>
		<td>
			<div id = "boxes_container">				
			</div>
		</td>
	</tr>	
</table>
<style>
table {
	margin: 0 auto;
}

#boxes_container {
	width: 500px;
	height: 350px;
	position: relative;
}

.hidden_box {
	margin: 1px;
	padding: 1px;
	border: 1px solid black;
	position: absolute;
}
</style>
<script type = 'text/javascript'>
	var boxesNumber = 12, boxContainer = document.getElementById("boxes_container");
	function createHiddenBoxes() {
		var hiddenBox;
		for (i = 0; i < boxesNumber; i++) {
			hiddenBox = document.createElement("div");
			hiddenBox.className = "hidden_box";
			hiddenBox.id = "hidden_box" + i;
			hiddenBox.style.width = 95 + 'px';
			hiddenBox.style.height = 70 + 'px';
			boxContainer.appendChild(hiddenBox);
		}
	}
	
	function sortHiddenBoxes() {
		var hiddenBoxes = boxContainer.getElementsByClassName("hidden_box"),
			x = 0, y = 0, deltaX = 100, deltaY = 75;									
		for (var i = 0; i < boxesNumber; i++) {
			if (i == 0) hiddenBoxes[i].style.top = 5 + 'px';
			if (i != 0 && i < 4) {
				x += deltaX;
				hiddenBoxes[i].style.left = x + 'px';
				hiddenBoxes[i].style.top = 5 + 'px';
			} 
		}
		x = -deltaX;
		for (var j = 0; j < boxesNumber; j++) {
			if (j > 3) {
				x += deltaX;
				y = deltaY;
				hiddenBoxes[j].style.left = x + 'px';
				hiddenBoxes[j].style.top = y + 'px';
			}
		}
		x = -deltaX;
		y = 2 * deltaY;
		for (var k = 0; k < boxesNumber; k++) {
			if (k > 7) {
				x += deltaX;
				hiddenBoxes[k].style.left = x + 'px';
				hiddenBoxes[k].style.top = y + 'px';
			}
		}
	}	
	createHiddenBoxes(); sortHiddenBoxes();		
</script>
необходимо переписать функцию sortHiddenBoxes() так чтобы она каждый раз динамически отрисовывала блоки в зависимости от переменной boxesNumber в которой указывается число блоков - значение для этой переменной тянется из базы и иногда может быть разным (это кол-во картинок которые расположены в одной общей картинке (4 x 3, 5 x 20) по 4 картинки на каждой строке с 5ью столбцами и т.д.)
Мой гавнокодский вариант работает только для случая 4 x 3 (12 блоков - потому что большинство картинок будут иметь в себе 12 картинок, но большинство не означает ВСЕ!!).
Помогите избавиться от этих 3 циклов for() {} сделав код покороче и универсальнее (

рони 03.10.2013 14:01

Arramis,
может таблицу генерировать а не дивы?

Arramis 03.10.2013 14:18

Цитата:

Сообщение от рони (Сообщение 274896)
может таблицу генерировать а не дивы?

а чем это может быть полезным ? выравнивать все равно придется
помоему

рони 03.10.2013 15:07

Arramis,
немогли бы вы пояснить что значит
Цитата:

Сообщение от Arramis
выравнивать все равно придется

и
Цитата:

Сообщение от Arramis
отсортированно


Arramis 03.10.2013 15:23

Цитата:

Сообщение от рони (Сообщение 274906)
Arramis,
немогли бы вы пояснить что значит

функция sortHiddenBoxes() сдвигает каждый блок влево на deltaX пикселей
и сдвигает вниз на deltaY px если кол - во блоков > 3 или > 7 - получается такое некое выравнивание. Мне нужно чтобы эта функция выполнялась правильно (тоесть "выравнивала" блоки) в независомсти от кол - ва блоков. Даешь ему параметр колва блоков, deltaX, deltaY и она рисует столько сколько нужно и "выровненно".
Если генерировать таблицу то содержимое каждого tr и td надо будет тоже выравнивать (но уже с другими значениями deltaX и deltaY) чтобы все картинки из общей картинки накладывались на каждый этот блок ровно.

рони 03.10.2013 15:44

Цитата:

Сообщение от Arramis
чтобы все картинки из общей картинки накладывались на каждый этот блок ровно.

:blink:
... да и зачем сдвигать задали нужные отступы оно само ляжет как надо

Arramis 03.10.2013 16:00

Цитата:

Сообщение от рони (Сообщение 274916)
:blink:
... да и зачем сдвигать задали нужные отступы оно само ляжет как надо

на одной картинке много картинок которые фиксированны - тоесть они являются частью одного файла .jpg в котором нарисовани эти картинки.

Arramis 03.10.2013 16:07

рони,
тоесть мне необходимо сдвигать именно эти созданные мною блоки а не сами картинки, потому что картинки на одной целой картинке доступа к которым из js я не имею потому что они находятся в другой картинке которая одна.

Arramis 03.10.2013 16:18

рони,
если блоки не сдвигать они будут накладываться друг на друга - тоесть все блоки будут на первой картинке, а мне нужно чтобы каждый блок был наложен на каждой картинке.

рони 03.10.2013 16:35

Arramis,
моя твоя непонимать ...


Часовой пояс GMT +3, время: 07:46.