Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: pozycja absolutna
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
nospor
Przyszła kreska na matyska....

Jak wyliczyć pozycję absolutną elementu na stronie? Do tej pory korzystalem z takiej oto funkcji:
Kod
    function findXY(objId)
    {
        var obj=document.getElementById(objId);
        var x=0,y=0,w=0,h=0;
        if (obj)
        {w=obj.offsetWidth;h=obj.offsetHeight;}
        while (obj!=null)
        {
            x+=obj.offsetLeft;
            y+=obj.offsetTop;
            obj=obj.offsetParent;
        }
        return {X:x,Y:y,W:w,H:h};
    }

Dzialala cacy do czasu, az nie przyszlo mi wyliczac pozycji elementow w cudnym css, gdzie div na divie, kazdy ma jakies marginy i innego typu rzeczy, co powodowalo iz szlag trafial poprawną pozycję.

Przegladalem kody jsCalendar, gdzie im sie to udaje, ale tak to popisali, że wymiekam i mam problemy z przerzuceniem tego w jedną zgrabną funkcję.

Zwracam się więc z prośbą o pomoc.

edit:
moze jeszcze cos dopisze, bo mialem pytanko o co mi dokladnie chodzi smile.gif

A wiec funkcja ktorą pokazalem dziala dobrze gdy nie jest struktura html zamotana. jednak gdy jest, to juz sie nie sprawuje. W jsCalendar dorobili jeszcze funkcję fixPosition, ktora po wyliczeniu pozycji absolutnej jak gdyby ją jeszcze dostosowuje. A ta funkcja jest wywolywana w jeszcze jednej funkcji o czadowej nazwie: continuation_for_the_fucking_khtml_browser(). Mam jednak problem z wyodrebnieniem tego wszystkiego z jsCalednar, tudziez z napisaniem wlasnego odpowiednika.
mike
Biblioteka Pprototype 1.4.0
Obiekt: Position
Metoda: cumulativeOffset( Element )
nospor
@mike_mech no niestety, ta funkcja jest identczyna co moja, ktora przedstawilem powyzej i zwraca dokladnie takie same wyniki

edit:
dobra, po dokladnej analizie i debugowaniu wyszlo na to, ze jsCalendar wylicza identyczne dane co i ja. Tylko ze jak on przyczepia pod te pozycje swoją kontrolke to mu tam wisi, a jak ja podczepiam pod te pozycje swoja kontrolke, to mi wisi ladnych paredziesiat pixeli nizej. zalamka.
revyag
A może te paredziesiąt pikseli po prostu na sztywno dodaj/odejmij ? No chyba że ten odstęp nie jest stały.
nospor
no wlasnie nie moge tego zrobic, gdyz jak pisalem wczesniej bylo ok. czyli jak teraz na sztywno odejme, potem sie zminie layot strony i znowy bedzie gdzie indziej winksmiley.jpg

http://nospor.vis-maior.net/cal.png
ta roznica jest to przesuniecie wzgledem gornego paska. zaznaczylem na rysunku.

Pozycja wyliczna jest dobrze, względem calego okna, natomiast gdy ustawiam diva na tej pozycji, to ustawia mi wzgledem diva, ktory znajduje sie bezposrednio nad tym górnym paskiem.
Natomiast controlka jscalendar ustawia sie dobrze - wzgledem okna (a nie wzgledem diva co moja kontrolka).

Wynikaloby z tego ze to wina css, ze cos sie gdzies nadpisuje, ale porownywalem wszystkie css i niczym szczegolnym sie nie roznia sad.gif
artur81
hm, może pobierz pozycję myszy na ekranie, a nie tego bloku i do ikony kalendarza daj swoją funkcję pokazującą kalendarz. Swojego czasu też wykorzystywałem kalendarz, w jednej ze stron, tyle ze tam uaktywniał się on po kliknięciu w pole tekstowe.
Załączam kod (nie jestem autorem), działał u mnie bez zarzutu, może w ten sposób spróbuj.
nospor
sek w tym ze pozcyja myszki jest wyliczana taka sama co pozycja obrazka (oczywiscie gdy stoje tam gdzie trzeba smile.gif ).

Tu mi sie chrzania css, ale wymiekam, nie wiem co przez co. ide walczyc dalej smile.gif

edit:
To nawet nie wina css. Nagle tchnelo mnie czemu sie wyswietla wzgledem diva co lezy pod paskiem na gorze. A odpowiedź jest bardzo prosta: gdyz moja kontrolka jest tworzona wlasnie w tamtym divie, a ze jest on "absolute", to kontrolka jest pozycjonowana wedlug niego, a nie wedlugo calego okna. Tak wiec pozycja byla wyliczana dobrze ino byl blad wzgledem czego ma byc ustawiane.
Tworze wiec dynamicznie diva mojej kontrolki i przypisuje go do glownego okna strony i wszystko dziala jak ta lala smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.