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

хорошо, согласен
изначальная задача была - переносить объекты по заданной части экрана. Основным затыком стало то, что объект должен тормозиться у границы и не вылазить за неё. По поводу самого драг н дропа можно найти в интернете хорошие статьи, которые взять за шаблон, а вот с этим моментом оказалась проблема.

Для того чтобы перетаскивать элемент его нужно делать позиционированным относительно родителя, но чтобы оне не вылазил за границы долна быть проверка вида:
object.style.left = (maybe_left >= 0 && maybe_left<=(doska_width - object_width) - 2) ? maybe_left + 'px' : (maybe_left <= 0?'0px':(doska_width - object_width) - 2);

где maybe_left - потенциальное новое значение позиционирования
doska_width - ширина доски, по которой перетаскивается объект
object_width - ширина объекта
то, что вычетается циферками - это бордеры (не стал для них автомат настраивать)

Затык, о котором я даже и представить себе не мог и долгое время смотрел вообще в другую сторону - это определение ширины объекта, с условием, что она указана в css. Дело в том, что оказывается object.currentStyle.width прокатит только для Opera и IE, остальные браузеры наотказ не хотят такое кушать. Для других браузеров приходится делать window.getComputedStyle(object,null).width; Вот собственно и всё решение, к которому пришел

универсальное решение:
if( doska.currentStyle ) 
	{
	var doska_width = doska.currentStyle.width;
	}
else if( window.getComputedStyle ) 
	{
	var doska_width = window.getComputedStyle(doska,null).width;
	}


ЗЫ. Если у кого-то стоит задача по разработке драг-н-дропа в переделах ограниченной зоны - отпишитесь - выложу полный код, благо я всего две недели кожу на JS и код у меня пока более чем читабельный для любого уровня кодинга)))

Последний раз редактировалось ajon, 06.06.2010 в 14:16.
Ответить с цитированием