Показать сообщение отдельно
  #1 (permalink)  
Старый 31.01.2013, 14:10
Интересующийся
Отправить личное сообщение для m2broth Посмотреть профиль Найти все сообщения от m2broth
 
Регистрация: 27.10.2011
Сообщений: 10

Добавление непересекаемых блоков на страницу
Всем привет,

Есть проблемка...
На страницу динамически добавляются блоки с текстом ( пусть размер будет 200*100 px). При этом они не должны пересекатся. При добавлении нового блока функция проверяет каждый блок на пересечение с новым блоком, и если они пересекаются - продолжает поиск. Но благодаря такой рекурсии скрипт виснет даже при 2-х блоках на странице. Есть ли другие пути решения? или как оптимизировать скрипт чтобы все работало более менее быстро.
Вот пример скрипта
function randomXY(list)
{
		
	m = parseInt(1);
	n = parseInt(79);
	xv = Math.floor( Math.random() * (n - m + 1) ) + m;
	m = parseInt(30);
	n = parseInt(50);
	yv = Math.floor( Math.random() * (n - m + 1) ) + m;
	
	per = false;
        
	$.each(list, function(index, value) { 
		inc = getInc();
                
		a = {x:xv,y:yv,x1:xv+inc.x,y1:yv+inc.y};
		b = {x:value.x,y:value.y,x1:value.x+inc.x,y1:value.y+inc.y};
                  
		  if(checkp2(a,b))
		  {
			  per = true;
			  
		  }		
	});
	
	if(per)
	{
		
		return randomXY(list);
	}
	else
	{
			
			res = {x:xv,y:yv};
			
			return res;
	}
	
	
}

функция checkp2 проверяет пересечение. входной параметр List - список уже имеющихся блоков на страницу
Ответить с цитированием