Javascript.RU

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

DragnDrop в FF, chrome и Safari
приношу извинения.
Видимо 4 дня сидения над одной функцией даром не проходят. через час после постинга смог понять где бага вылазила..

теперь вопрос всего лишь сводится к кроссбраузерному доставанию ширины и высоты объекта из файла css ... а по этому вопросу нагуглить труда не составляет..

PS снесите плиз тему.

Последний раз редактировалось ajon, 06.06.2010 в 05:05.
Ответить с цитированием
  #2 (permalink)  
Старый 06.06.2010, 08:50
Аватар для Geddar
Кандидат Javascript-наук
Отправить личное сообщение для Geddar Посмотреть профиль Найти все сообщения от Geddar
 
Регистрация: 23.05.2009
Сообщений: 100

ajon, думаю было бы не плохо поделиться найденым решением. Ведь для того форум и есть
__________________
Обходя грабли ты теряешь драгоценный жизненный опыт!
Ответить с цитированием
  #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.
Ответить с цитированием
  #4 (permalink)  
Старый 06.06.2010, 15:21
Профессор
Отправить личное сообщение для exec Посмотреть профиль Найти все сообщения от exec
 
Регистрация: 21.01.2010
Сообщений: 1,022

ajon, я решал эту задачу так:

Во время перетаскивания объекта каждый раз сравниваем текущий pageX/pageY, если он больше отпределённого числа, то просто не присваеваем top/left'-у элемента текущий pageX/pageY:

if (e.pageX < 510) el.style.marginLeft = e.pageX - 10;

Последний раз редактировалось exec, 06.06.2010 в 15:25.
Ответить с цитированием
  #5 (permalink)  
Старый 06.06.2010, 15:27
Аватар для Geddar
Кандидат Javascript-наук
Отправить личное сообщение для Geddar Посмотреть профиль Найти все сообщения от Geddar
 
Регистрация: 23.05.2009
Сообщений: 100

exec, да, обычно так и решаеться и я так делал во флеше и даже паскале. Метод универсальный. Если меньше допустимого, анологично.
__________________
Обходя грабли ты теряешь драгоценный жизненный опыт!
Ответить с цитированием
  #6 (permalink)  
Старый 06.06.2010, 21:18
Интересующийся
Отправить личное сообщение для ajon Посмотреть профиль Найти все сообщения от ajon
 
Регистрация: 06.06.2010
Сообщений: 25

exec, угумс, но у меня еще один ньанс стоял проблемой... у меня изначальное смещение не всегда равно top:0; left:0; поэтому пришлось извращаться(( Согласен, что Ваш вариант проще и если еще как-нить придётся с этим столкнуться - наверное так и сделаю, чтобы не выпендриваться
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Забавный баг (фича?) в Chrome / Safari Cr@ZyBoY Opera, Safari и др. 11 22.02.2010 17:26
проблема в Safari под Mac OS JaLinsi Opera, Safari и др. 5 01.02.2010 12:14
Google Chrome Андрей Параничев Opera, Safari и др. 42 02.08.2009 14:23
Подскажите новачку: Не работает в IE, Chrome и Safari Nichol Общие вопросы Javascript 11 27.01.2009 03:05
Safari и клавиша Ctrl freebit Events/DOM/Window 2 19.07.2008 23:57