Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Javascript > position of an element relative to the page

Reply
Thread Tools

position of an element relative to the page

 
 
steven acer
Guest
Posts: n/a
 
      10-29-2007
i'm illiterate when it comes to javascript and browser issues, i'm
trying to code a small help module for my java app.i've went far
enough coding all the server side but i'm stuck with javascript now.

i'm trying to implement a tool tip behavior on a couple of input
element.
I just can't get to figure out the coordinates of the element in
question with respect to the page
especially when it is inside a scrollable container such as a DIV.
the tip has to be displayed right at the bottom left corner of the
element where the key is pressed therefor i would have to calculate
the coordinates of the element's current position on the page
regardless of how nested it is and taking into account the scrolled
amount of its parent container and ancestors each time.
i tried Peter-Paul Koch's findPos and tweeked it a bit as follows

function findPos(obj) {
if(obj==null)return [-1,-1];
var curleft =0;
var curTop=0;
if (obj.offsetParent) {
curleft = obj.offsetLeft;
curtop = obj.offsetTop;
while (obj = obj.offsetParent) {
curtop += obj.offsetTop-(obj.scrollTop?obj.scrollTop:0);
curleft += onj.offsetLeft(obj.scrollLeft?obj.scrollLeft:0);
}
}
return [curleft,curtop];

the problem is that offsetTop is not updated when i scroll.... i
always get a fixed value so that was not helping
thanks
o explanation ...

 
Reply With Quote
 
 
 
 
Evertjan.
Guest
Posts: n/a
 
      10-29-2007
steven acer wrote on 29 okt 2007 in comp.lang.javascript:

> i'm illiterate when it comes to javascript and browser issues, i'm
> trying to code a small help module for my java app.i've went far
> enough coding all the server side but i'm stuck with javascript now.
>
> i'm trying to implement a tool tip behavior on a couple of input
> element.
> I just can't get to figure out the coordinates of the element in
> question with respect to the page
> especially when it is inside a scrollable container such as a DIV.
> the tip has to be displayed right at the bottom left corner of the
> element where the key is pressed therefor i would have to calculate
> the coordinates of the element's current position on the page
> regardless of how nested it is and taking into account the scrolled
> amount of its parent container and ancestors each time.
> i tried Peter-Paul Koch's findPos and tweeked it a bit as follows
>
> function findPos(obj) {
> if(obj==null)return [-1,-1];
> var curleft =0;
> var curTop=0;
> if (obj.offsetParent) {
> curleft = obj.offsetLeft;
> curtop = obj.offsetTop;
> while (obj = obj.offsetParent) {


obj == obj.offsetParent

perhaps?

Not that I understand what you are after

> curtop +=
> obj.offsetTop-(obj.scrollTop?obj.scrollTop:0);
> curleft +=
> onj.offsetLeft(obj.scrollLeft?obj.scrollLeft:0);
> }
> }
> return [curleft,curtop];
>
> the problem is that offsetTop is not updated when i scroll.... i
> always get a fixed value so that was not helping
> thanks
> o explanation ...
>
>




--
Evertjan.
The Netherlands.
(Please change the x'es to dots in my emailaddress)
 
Reply With Quote
 
 
 
 
David Mark
Guest
Posts: n/a
 
      10-29-2007
On Oct 29, 1:38 pm, steven acer <(E-Mail Removed)> wrote:
> i'm illiterate when it comes to javascript and browser issues, i'm
> trying to code a small help module for my java app.i've went far
> enough coding all the server side but i'm stuck with javascript now.
>
> i'm trying to implement a tool tip behavior on a couple of input
> element.


Why not use title attributes? Most browsers display their values as
tooltips.

> I just can't get to figure out the coordinates of the element in
> question with respect to the page
> especially when it is inside a scrollable container such as a DIV.


It is not the simplest task.

> the tip has to be displayed right at the bottom left corner of the
> element where the key is pressed therefor i would have to calculate
> the coordinates of the element's current position on the page
> regardless of how nested it is and taking into account the scrolled
> amount of its parent container and ancestors each time.


Is it nested inside multiple scrolling containers? If not, you only
have one scroll adjustment to worry about.

> i tried Peter-Paul Koch's findPos and tweeked it a bit as follows
>


Beware that most positioning code on the Internet is bunk.

> function findPos(obj) {
> if(obj==null)return [-1,-1];


Will your code ever pass null to this function? Even if it does,
returning valid positions for an invalid parameter is an odd choice.

> var curleft =0;
> var curTop=0;
> if (obj.offsetParent) {
> curleft = obj.offsetLeft;
> curtop = obj.offsetTop;
> while (obj = obj.offsetParent) {
> curtop += obj.offsetTop-(obj.scrollTop?obj.scrollTop:0);
> curleft += onj.offsetLeft(obj.scrollLeft?obj.scrollLeft:0);
> }


This code fails to account for borders (clientLeft/Top. It also
assumes that the element's scrolling container will be one of its
offset ancestors, which is rarely the case.

> }
> return [curleft,curtop];
>
> the problem is that offsetTop is not updated when i scroll.... i
> always get a fixed value so that was not helping
> thanks
> o explanation ...


Remove the scrollLeft/scrollTop adjustments from the above routine.
Just add in the scroll position after it returns. I assume your code
knows which container the element is in. If not, you will have to
iterate through its parentNode's and adjust for each parent that has
scrolled.

 
Reply With Quote
 
Thomas 'PointedEars' Lahn
Guest
Posts: n/a
 
      10-29-2007
steven acer wrote:
> the problem is that offsetTop is not updated when i scroll....


Of course it isn't. But scrollTop is.

> i always get a fixed value so that was not helping


Posting with proper spelling would increase
your chances of getting helpful replies.

http://jibbering.com/faq/


PointedEars
--
var bugRiddenCrashPronePieceOfJunk = (
navigator.userAgent.indexOf('MSIE 5') != -1
&& navigator.userAgent.indexOf('Mac') != -1
) // Plone, register_function.js:16
 
Reply With Quote
 
steven acer
Guest
Posts: n/a
 
      10-30-2007

David Mark wrote:
> On Oct 29, 1:38 pm, steven acer <(E-Mail Removed)> wrote:
> > i'm illiterate when it comes to javascript and browser issues, i'm
> > trying to code a small help module for my java app.i've went far
> > enough coding all the server side but i'm stuck with javascript now.
> >
> > i'm trying to implement a tool tip behavior on a couple of input
> > element.

>
> Why not use title attributes? Most browsers display their values as
> tooltips.
>
> > I just can't get to figure out the coordinates of the element in
> > question with respect to the page
> > especially when it is inside a scrollable container such as a DIV.

>
> It is not the simplest task.
>
> > the tip has to be displayed right at the bottom left corner of the
> > element where the key is pressed therefor i would have to calculate
> > the coordinates of the element's current position on the page
> > regardless of how nested it is and taking into account the scrolled
> > amount of its parent container and ancestors each time.

>
> Is it nested inside multiple scrolling containers? If not, you only
> have one scroll adjustment to worry about.
>
> > i tried Peter-Paul Koch's findPos and tweeked it a bit as follows
> >

>
> Beware that most positioning code on the Internet is bunk.
>
> > function findPos(obj) {
> > if(obj==null)return [-1,-1];

>
> Will your code ever pass null to this function? Even if it does,
> returning valid positions for an invalid parameter is an odd choice.
>
> > var curleft =0;
> > var curTop=0;
> > if (obj.offsetParent) {
> > curleft = obj.offsetLeft;
> > curtop = obj.offsetTop;
> > while (obj = obj.offsetParent) {
> > curtop += obj.offsetTop-(obj.scrollTop?obj.scrollTop:0);
> > curleft += onj.offsetLeft(obj.scrollLeft?obj.scrollLeft:0);
> > }

>
> This code fails to account for borders (clientLeft/Top. It also
> assumes that the element's scrolling container will be one of its
> offset ancestors, which is rarely the case.
>
> > }
> > return [curleft,curtop];
> >
> > the problem is that offsetTop is not updated when i scroll.... i
> > always get a fixed value so that was not helping
> > thanks
> > o explanation ...

>
> Remove the scrollLeft/scrollTop adjustments from the above routine.
> Just add in the scroll position after it returns. I assume your code
> knows which container the element is in. If not, you will have to
> iterate through its parentNode's and adjust for each parent that has
> scrolled.


David your suggestion really helped, thanks alot.
i cumulated all the offsetTop values of the parentOffset ancestors and
then substracted all the scrollTop values of the parentNode ancestors.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
QWebView: Get coordinates of an element and simulate a relative tothis position. Gelonida Python 0 02-19-2011 03:07 PM
element.style.position="relative !important"; petermichaux@gmail.com Javascript 2 03-18-2006 10:35 PM
Where is Form Relative Position and Absolute Position in VS.Net 2005 ? Luqman ASP .Net 1 02-07-2006 10:27 AM
Absolute position of a relative element Stephan Koser Javascript 7 06-18-2004 07:45 AM
How to determine the relative position of an element? delerious@no.spam.com Javascript 0 12-07-2003 09:04 AM



Advertisments