Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
Home
Discussion GroupsGeneralPHPASPPerlColdFusionFlashHTML, CSS, ScriptsBrowsers

Webmaster Forum / HTML, CSS, Scripts / JavaScript / October 2007



Tip: Looking for answers? Try searching our database.

position of an element relative to the page

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
steven acer - 29 Oct 2007 18:38 GMT
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 ...
Evertjan. - 29 Oct 2007 18:50 GMT
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
[quoted text clipped - 20 lines]
>           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);
[quoted text clipped - 8 lines]
> thanks
> o explanation ...

Signature

Evertjan.
The Netherlands.
(Please change the x'es to dots in my emailaddress)

David Mark - 29 Oct 2007 20:00 GMT
> 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;
[quoted text clipped - 5 lines]
>                         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];
[quoted text clipped - 3 lines]
> 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.
steven acer - 30 Oct 2007 09:03 GMT
> > 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
[quoted text clipped - 58 lines]
> 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.
Thomas 'PointedEars' Lahn - 29 Oct 2007 21:55 GMT
> 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
Signature

var bugRiddenCrashPronePieceOfJunk = (
   navigator.userAgent.indexOf('MSIE 5') != -1
   && navigator.userAgent.indexOf('Mac') != -1
)  // Plone, register_function.js:16

 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2009 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.