Forum Webscript.Ru

Программирование => JavaScript & JScript => Тема начата: pahal от 02 Февраля 2004, 15:47:36

Название: Проблема с определением top
Отправлено: pahal от 02 Февраля 2004, 15:47:36
Пытаюсь определить координаты какого-либо объекта на странице
d=eval(\'document.getElementById("\'+obj+\'").style\');

top= d.top;
left= d.left;

Но, почему-то не работает это.
Хотя таким же способом задать эти свойста у объекта obj получается, а определить их никак

Может кто знает, подскажет...
Название: Проблема с определением top
Отправлено: CGVictor от 02 Февраля 2004, 15:59:10
Цитировать
pahal:
d=eval(\'document.getElementById("\'+obj+\'").style\');

Попробуй
eval(\'d=document.getElementById("\'+obj+\'").style\');
Название: Проблема с определением top
Отправлено: pahal от 02 Февраля 2004, 16:10:33
А что это даст и как при этом свойства top и left вытащить?
Название: Проблема с определением top
Отправлено: CGVictor от 02 Февраля 2004, 16:15:18
Функция Eval выполняет код, который ей передали.
1.
Цитировать
pahal:
d=eval(\'document.getElementById("\'+obj+\'").style\');

d присвоить результат выполнения функции eval (true)
2.
Цитировать
CGVictor:
eval(\'d=document.getElementById("\'+obj+\'").style\');

d присвоить стиль объекта (style)
Уловил разницу?
Свойства вытаскиваются абсолютно идентично.
Название: Проблема с определением top
Отправлено: pahal от 02 Февраля 2004, 16:20:09
так что получится после выполнения этой функции можно вытаскивать свойства так же

top= d.top;
left= d.left;
Название: Проблема с определением top
Отправлено: CGVictor от 02 Февраля 2004, 16:23:17
Вроде так.
Название: Проблема с определением top
Отправлено: pahal от 02 Февраля 2004, 16:26:26
было бы замечательно, да вот только результат такой же - эти величины не определяются....:(
Название: Проблема с определением top
Отправлено: pahal от 02 Февраля 2004, 17:10:10
Неужели никто не поможет, как определить свойства left и top у объекта?
Название: Проблема с определением top
Отправлено: Макс от 02 Февраля 2004, 17:43:54
ИМХО, пока ты не установил top/left (яваскриптом или через CSS) нельзя узнать скриптом их значения.
Поэтому часто при создании слоев (layers), им сначало устанавливают начальное положение

ЗЫ
могу ошибаться, давно не занимался client-side программированием
Название: Проблема с определением top
Отправлено: pahal от 02 Февраля 2004, 18:03:05
так мне-то как раз и нужно узнать координаты объекта, а где именно он будет лежать сначала неизвестно...
его-то координаты мне и нужны, чтобы другому слою их передать
Название: Проблема с определением top
Отправлено: гоша от 02 Февраля 2004, 18:07:38
pahal

во-первых, eval на помойку сразу.

во-вторых, свойства читаются так

document.getElementById(obj).offsetLeft
document.getElementById(obj).offsetTop

а устанавливаются так

document.getElementById(obj).style.left=...
document.getElementById(obj).style.top=...

CGVictor

хорош врать-то.
Название: Проблема с определением top
Отправлено: pahal от 02 Февраля 2004, 18:13:34
спасибо Гоша!!!
как всё, однако просто...:)
Название: Проблема с определением top
Отправлено: pahal от 02 Февраля 2004, 18:20:41
вот только NN 7 почему-то не хочет этого определять
Название: Проблема с определением top
Отправлено: CGVictor от 02 Февраля 2004, 18:39:15
Цитировать
гоша:
хорош врать-то.

Что тебе не понравилось?

Цитировать
гоша:
document.getElementById(obj).offsetLeft
document.getElementById(obj).offsetTop

в Нетскейпе не работают. Кто после этого "хорош врать"?
Название: Проблема с определением top
Отправлено: pahal от 02 Февраля 2004, 18:44:40
а что именно эти свойства определяют?
а то у меня получилась странная вещь...
в слое лежит объект, координаты самого слоя как-то расчитываются, а объект лежит внутри слоя точно не известно где...
а эти свойства определяют координаты как-то странно, совсем не те значения, которые визуально видны, как буд-то этот объект лежит в самом верху страницы???
Название: Проблема с определением top
Отправлено: гоша от 02 Февраля 2004, 19:08:56
offset - по английски "смещение". Т.е. эти свойства возвращают позицию (смещение) объекта относительно старшего элемента (=offsetParent), а не позицию на странице.
Название: Проблема с определением top
Отправлено: subbotin от 03 Февраля 2004, 11:49:10
Чтобы получить координату относительно документа, нужно пройти в цикле по свойству offsetLeft всех предков:

var node=obj;
var left=0;
while(node!=document.body){
left+=parseInt(node.offsetLeft);
node=node.parentNode;
}
Название: Проблема с определением top
Отправлено: гоша от 03 Февраля 2004, 12:08:45
while(node!=document.body){

так делать не надо. просто

while(node){

и не

node=node.parentNode;

а

node=node.offsetParent;

это разные вещи.
Название: Проблема с определением top
Отправлено: pahal от 04 Февраля 2004, 21:42:22
Что-то как-то это всё очень сложно....:(

Неужели нельзя сделать это как-то попроще..

Проблема-то вот в чём...

Есть динамическая страничка, на неё ссылки, при клике по ним вываливается менюшка, в которой опять же ссылки, при наведении на которые вываливаются ещё менюшки следующего уровня.
И нужно вываливать их в строго определённом месте. А то они появляются то выше, то ниже, координата нового слоя вычисляется из положения мыши.

Может это можно сделать как-то гораздо проще....

Заранее благодарен за ответ!
Название: Проблема с определением top
Отправлено: гоша от 05 Февраля 2004, 12:04:25
http://www.xs4all.nl/~peterned/csshover.html
Название: Проблема с определением top
Отправлено: pahal от 05 Февраля 2004, 15:37:37
Спасибо, попробую...
Название: Проблема с определением top
Отправлено: Nickii от 07 Февраля 2004, 10:14:44
Если вернуться к первому варианту:

 d = eval("document.getElementById(id)").style;
 top = d.top;

Но второй несколько лучше
 
 d = document.getElementById(id);

 Вот только свойства
  offsetLeft и offsetTop специфичны для IE попробуй
 использовать clientLeft и clientTop

Если не поможет вставь следующий код в текст скрипта
и посмотри какие свойства нужно использовать

 d = document.getElementById(id);
test = open("","Test","width=600,height=400,scrollbars=1")
test.document.open();
for(i in d)
  test.document.write(i+"="+d+"
");
test.document.close();


Если ты пользуешь элемент в первый раз, то это свойство style ежели они не были до этого установлены ты действительно не получишь.