11. maj 2001 - 16:02Der er
24 kommentarer og 2 løsninger
Få xy positionen på et billede (ikke i et layer)...
Jeg har et billede hvorved jeg godt vil have et layer jeg har til, at dukke op (altså laget skal dukke op lige ved billedet). Problemet er ,at billedets position ikke på nogen måde er bestemt ved pixels, da det er i en tabel, der er centreret på siden...
>>jumper Det vil sige: var x=document.all.mitBillede.offsetLeft+document.all.mitBillede.offsetParent.offsetLeft; var y=document.all.mitBillede.offsetTop+document.all.mitBillede.offsetParent.offsetTop; ?
emileej, det vil sige at du skal lægge offsetLeft/offsetTop sammen for alle de elementer der er offsetParent til mitBillede, startende fra mitBillede, dernæst til dens td, så dens tr, så dens table, osv, indtil den når <HTML>.
Derfor er det nemmere at bruge en funktion som f.eks. getDim, der selv looper igennem fra mitBillede til HTML ;)
Hvis du ikke ønsker positionen i vinduet men ønsker at stoppe ved fx en tabel kan du ændre funktionen spm følger:
function getDim(el){ var tE2 = document.getElementById(\"tabelNavn\") var rd = {x:el.offsetLeft,y:el.offsetTop}, tEl=el.offsetParent while (tEl){ rd.x += tEl.offsetLeft rd.y += tEl.offsetTop if ( tEl == tE2 ) break; tEl = tEl.offsetParent } return rd }
efter at have sat en id=\"tabelNavn\" i den tabel (eller div eller had det nu er for en container) du vil find x,y ud til.
Jow jow - ville bare ikk begynde at indsætte noget (tager en del tid i min rodede kode), før jeg var helt sikker på, at det overhovedet kunne bruges :)
emileej, smid min kode ind og prøv den. Den giver dig de absolutte X og Y værdier for dit billede (der ikke er absolut positioneret), uanset hvordan du har bygget siden op. Så vidt jeg husker ville duhave xy position på et billede, og det får du med min getDim()funktion.
<ole> Du kan bruge Thor\'s funktion (der iøvrigt ligner den, vi altid bruger på mit arbejde), hvis du \'med rund hånd spreder lidt\' parseInt()\'er. NS6 er lidt mere hysterisk med positions-værdierne - så de skal ofte trækkes gennem en parseInt(værdi) for at NS6 kan læse dem. F.eks: rd.x += parseInt(tEl.offsetLeft) ...osv. Prøv dig lidt frem - og brug nogle alerts til at finde ud af, hvor det går galt :o) /mvh </bole>
function getXYcoord ( obj ) { // det objekt (billed, td, div, etc) du vil have coordinater på var elm = obj; var rd = { x:0 ,y:0 }; do { rd.x += parseInt( elm.offsetLeft ); rd.y += parseInt( elm.offsetTop ); elm = elm.offsetParent; } while ( elm ); return rd }; //end getXYcoord ( string ) -> object{x,y}
function getXYcoord ( obj ) { // det objekt (billed, td, div, etc) du vil have coordinater på var rd = { x:0 ,y:0 }; if (document.layers) { // NS 4 rd.x = obj.x; rd.y = obj.y; } else { // IE og NS 6 var elm = obj; do { rd.x += parseInt( elm.offsetLeft ); rd.y += parseInt( elm.offsetTop ); elm = elm.offsetParent; } while ( elm ); }; return rd; }; //end getXYcoord ( object ) -> object{x,y}
Tark skal i have! Jeg sidder lige og er igang med at oplære Robert (på min hjemmeside) det ville være rart hvis i (hvis i har tid og lyst) gik ind på http://eej.dk og stilte ham nogle spørgsmål, så jeg kan lære ham dem han ikke kender :)
Hehe...det havde jeg slet ikke tænkt på :o) ...men tak! :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.