Forum Webscript.Ru
Программирование => JavaScript & JScript => Тема начата: pahal от 02 Февраля 2004, 15:47:36
-
Пытаюсь определить координаты какого-либо объекта на странице
d=eval(\'document.getElementById("\'+obj+\'").style\');
top= d.top;
left= d.left;
Но, почему-то не работает это.
Хотя таким же способом задать эти свойста у объекта obj получается, а определить их никак
Может кто знает, подскажет...
-
pahal:
d=eval(\'document.getElementById("\'+obj+\'").style\');
Попробуй
eval(\'d=document.getElementById("\'+obj+\'").style\');
-
А что это даст и как при этом свойства top и left вытащить?
-
Функция Eval выполняет код, который ей передали.
1.pahal:
d=eval(\'document.getElementById("\'+obj+\'").style\');
d присвоить результат выполнения функции eval (true)
2.CGVictor:
eval(\'d=document.getElementById("\'+obj+\'").style\');
d присвоить стиль объекта (style)
Уловил разницу?
Свойства вытаскиваются абсолютно идентично.
-
так что получится после выполнения этой функции можно вытаскивать свойства так же
top= d.top;
left= d.left;
-
Вроде так.
-
было бы замечательно, да вот только результат такой же - эти величины не определяются....:(
-
Неужели никто не поможет, как определить свойства left и top у объекта?
-
ИМХО, пока ты не установил top/left (яваскриптом или через CSS) нельзя узнать скриптом их значения.
Поэтому часто при создании слоев (layers), им сначало устанавливают начальное положение
ЗЫ
могу ошибаться, давно не занимался client-side программированием
-
так мне-то как раз и нужно узнать координаты объекта, а где именно он будет лежать сначала неизвестно...
его-то координаты мне и нужны, чтобы другому слою их передать
-
pahal
во-первых, eval на помойку сразу.
во-вторых, свойства читаются так
document.getElementById(obj).offsetLeft
document.getElementById(obj).offsetTop
а устанавливаются так
document.getElementById(obj).style.left=...
document.getElementById(obj).style.top=...
CGVictor
хорош врать-то.
-
спасибо Гоша!!!
как всё, однако просто...:)
-
вот только NN 7 почему-то не хочет этого определять
-
гоша:
хорош врать-то.
Что тебе не понравилось?
гоша:
document.getElementById(obj).offsetLeft
document.getElementById(obj).offsetTop
в Нетскейпе не работают. Кто после этого "хорош врать"?
-
а что именно эти свойства определяют?
а то у меня получилась странная вещь...
в слое лежит объект, координаты самого слоя как-то расчитываются, а объект лежит внутри слоя точно не известно где...
а эти свойства определяют координаты как-то странно, совсем не те значения, которые визуально видны, как буд-то этот объект лежит в самом верху страницы???
-
offset - по английски "смещение". Т.е. эти свойства возвращают позицию (смещение) объекта относительно старшего элемента (=offsetParent), а не позицию на странице.
-
Чтобы получить координату относительно документа, нужно пройти в цикле по свойству offsetLeft всех предков:
var node=obj;
var left=0;
while(node!=document.body){
left+=parseInt(node.offsetLeft);
node=node.parentNode;
}
-
while(node!=document.body){
так делать не надо. просто
while(node){
и не
node=node.parentNode;
а
node=node.offsetParent;
это разные вещи.
-
Что-то как-то это всё очень сложно....:(
Неужели нельзя сделать это как-то попроще..
Проблема-то вот в чём...
Есть динамическая страничка, на неё ссылки, при клике по ним вываливается менюшка, в которой опять же ссылки, при наведении на которые вываливаются ещё менюшки следующего уровня.
И нужно вываливать их в строго определённом месте. А то они появляются то выше, то ниже, координата нового слоя вычисляется из положения мыши.
Может это можно сделать как-то гораздо проще....
Заранее благодарен за ответ!
-
http://www.xs4all.nl/~peterned/csshover.html
-
Спасибо, попробую...
-
Если вернуться к первому варианту:
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 ежели они не были до этого установлены ты действительно не получишь.