Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Координаты перетаскиваемого объекта


Автор: Alx 28.2.2004, 19:41
Значить так. есть <div style="position:absolute;">, который таскается мышкой по экрану. есть ли возможность определить его координаты, относительно элемента, над которым он сейчас расположен. Т.е. перетаскиваю на таблицу, координаты от ячейки, на свободную часть, от body и т.п.

не думаю, конечно, что это возможно, однако...

Автор: Royan 29.2.2004, 16:43
придется следить самому, на то и было придумано "position:absolute", чтобы координаты объекта были абсолютными относительно левого верхнего угла рабочей области окна.

Автор: Alx 29.2.2004, 17:57
так можно всё-таки как-нить получить координаты перетскиваемого объекта, можеть position сделать не absolute...

Автор: Sardar 29.2.2004, 23:19
Координаты любого обьекта можно получить через: offset(Top|Left) или style.pixel(Top|Left). А вот как найти координаты относительно обьекта над которым передвигаем другой обьект, события мыши для обьекта над которым двигаем другой не зажигаются.
Можно пробежатся по странице и собрать карту из: обьектов, их смещений и их z-index, тогда двигая обьект можно всегда узнать над каким обьектом мы сейчас находимся.
Это большой изврат ИМXО. ALEXANDRO что за страницу ты делаешь smile.gif?

Автор: Alx 1.3.2004, 09:54
ладно, извращаться не буду, буду считать offset и от этого отнимать offset элемента, над которым сейчас находится объект. Собственно, у меня тока один такой элемент и есть. Человек перетаскивает картинки в рамку, а потом надо всё это сохранить на серваке. вото мне и нужны были координаты картинок от таблицы с рамкой. Я сам не думал, что так возможно, поэтому ладно smile.gif

Автор: Alx 2.3.2004, 16:41
Sardar

Подожди-ка, подожди! offset(Top|Left) - координаты относительно род. элемента! А style.(left|top) - возвращает заданные элементы в таблице стилей! А мне-то надо если уж хотя бы не то, о чем я просил, а свойства, возвращающие координаты не свободно позиционированных элементов относительно левого края браузера!

Автор: GoodBoy 3.3.2004, 11:34
Чегой то ты своим последним сообщением меня совсем запутал... :-)))
Чего тебе надобно-то, старче?? :-)))))

Если offset(Top|Left) - координаты относительно род. элемента, а тебе нужны координаты относительно левого края браузера, то все, что я могу тебе предложить, так это пробегаться по дереву объектов (obj = obj.parent) до тех пор пока obj.tagName не станет равно "BODY", что будет фактически означать, что ты достиг са-а-а-а-амого самого главного родительского элемента. :-))) И он есть точка отсчета. Ну и суммировать смещения всех пробегаемых элементов. :-)))

Автор: Alx 3.3.2004, 20:03
спасибо, я чесно говоря сам запутался в этих координатах)) редко ими пользуюсь, тока, наверное, када менюшки делаю...

короче, я вручную посчитал пока, скока там, а для картинки которая перетаскивается свойство style.(left|top), но это конечно не очень хорошо - ведь бывают разные мониторы и т.п., поэтому потом надо буит нормально сделать, а так пока пусть живёт!))

Автор: Alx 5.3.2004, 11:27
GoodBoy

слушай, а ты знаешь, не получается! я када в статус баре прописываю window.event.x - возвращает 240, када мышь у края <td> в том месте, где надо. А када пробегаюсь по ветке возвращает 268!


Код
function setabsleft(obj)
{var absleft = obj.offsetLeft;
do
{obj = obj.parentElement;
absleft += obj.offsetLeft;
}
while (obj.parentElement.tagName != "BODY")
}


функцию вызывал при клике на том <TD> и передавал функции в obj параметр this.

там знаешь, что странно? что он где-то прибавляет по два пиксела таким тегам как <center>, <tbody> (кста, сам придумывает, я им вообще никогда не пользуюсь!), <basefont> - можеть по этому?

Автор: GoodBoy 5.3.2004, 12:55
Код
function setabsleft(obj) {
   var absleft = obj.offsetLeft;
   do {
       obj = obj.parentElement;
       if (obj.parentElement.tagName!="TBODY") absleft += obj.offsetLeft;
       if (obj.parentElement.tagName=="TABLE") absleft -= 2;
   } while (obj.parentElement.tagName != "BODY")
   alert(absleft);
}

Это при стандартных значениях cellpadding и cellspacing для таблицы.

Автор: Alx 5.3.2004, 15:17
Цитата
if (obj.parentElement.tagName=="TABLE") absleft -= 2;


ой не знаю, щас попробую...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)