Avatar billede fritz-79th Nybegynder
09. februar 2003 - 13:42 Der er 8 kommentarer og
1 løsning

Tjek af x position

Hvordan kan det være at jeg ikke kan tjekke positionen af x, når
mine styles ligger seperat fra <div>?! Hvis jeg styler direkte i mit
<div> tag er der ingen problemer. Men jeg er selvfølgelig interesseret
i at holde tingene adskilt.

Jeg har lavet en function der flytter rundt på mit layer, og hvis jeg
rykker på det for bagefter at tjekke på positionen af x er der ingen
problemer???.... må jeg be om en forklaring? ;)


<script language="JavaScript">
<!--
function MoveLayer(DivId,x,y){
        DivId = document.all[DivId].style
        DivId.pixelLeft = x
        DivId.pixelTop = y
}

function test(DivId){
    DivId = document.all[DivId].style
      x = DivId.pixelLeft
      y = DivId.pixelTop
    return alert(x)
}

//-->
</script>

<style type="text/css">
<!--

#blockDiv {position:absolute;
left:50px; top:100px;
width:30px; height:30px;
clip:rect(0,30,30,0);
layer-background-color:red;
background-color:red;}
-->
</style>

<body>
<div id="blockDiv"></div>

<input type="button" value="X-Pos" onClick="java script: test('blockDiv')">

<a href="#" onClick="java script: MoveLayer('blockDiv',75,150)">Flyt blockDiv</a>
</body>
Avatar billede olebole Juniormester
09. februar 2003 - 18:19 #1
<ole>

Slet 'java script:' i dine onclick-handlers. Der har det intet at gøre. Det har ikke noget med dette problem at gøre, men er forkert syntaks.

Der er forskel på, om værdier er angivet direkte på et elements style-objekt - som er det, du henter med JavaScript - eller om de angives i et stylesheet. Det kan du ikke lave om på, så du må angive 'left' direkte på elementet - eller på onload sætte en værdi på dem alle med JS.

/mvh
</bole>
Avatar billede olebole Juniormester
09. februar 2003 - 18:24 #2
Ellers kan du bruge 'offsetLeft' til at hente positionen (men kun, når elementet er absolut positioneret):

function test(DivId){
    DivId = document.all[DivId];
      x = DivId.offsetLeft;
      y = DivId.offsetTop;
    return alert(x)
}

I øvrigt er 'pixelLeft' proprietær MS-kode. Det fungerer kun i IE.
/mvh
Avatar billede fritz-79th Nybegynder
10. februar 2003 - 09:46 #3
Tak for et super svar Sir. Det var dog pokkers at man pludselig skal til at hente sine styles ind i sit HTML, når man nu er blevet tudet ørene fulde af det modsatte. :/
Avatar billede olebole Juniormester
10. februar 2003 - 18:56 #4
Det er fordi, du ikke helt har styr på CSS' og JS' virkemåde  ;o)
JavaScript henter properties, sat på elementets style-objekt - som ikke er det, du piller ved med et style-sheet.

En enkelt ting, du skal passe på:
Jo mere på mode en teknik er, jo flere vil tude dig ørerne fulde med, hvad du skal gøre - uden de selv kan gøre rede for det på fornuftig vis.
CSS og XHTML er for tiden nogle af de mest 'buzzy' teknikker, alle gerne vil gøre sig kloge på. Derfor vil du høre meget vrøvl og sludder om netop disse to ting  ;o)
/mvh
Avatar billede fritz-79th Nybegynder
11. februar 2003 - 10:30 #5
Ok, nu tror jeg så at jeg bedre forstår. Ideen bag testen er at jeg gerne vil lave et objekt for alle mine layers, for derefter at lave nogle funktioner som dynamisk kan manipulere palceringerne af mine layers. Men hvis jeg skal initialisere alle placeringerne af mine layers ved javascript eks ved onLoad, er jeg vist bedre tjent med at sætte mine styles direkte på elementerne?...eller hvad. heh heh.. jeg er vist stadig lidt forviret. ;]
Avatar billede olebole Juniormester
11. februar 2003 - 15:20 #6
Hvis du objektorienterer koden, skal du kunne tilgå en eller flere af lagenes style-properties i din constructor-funktion ... og så er du nok nødt til at sætte disse inline. Men du kan godt sætte resten i klasser. Du kan både sætte sætte en klasse og inline-styles på et element. Løsningen afhænger af din kode  :)
/mvh
Avatar billede olebole Juniormester
11. februar 2003 - 15:24 #7
Ellers kan du bruge denne funktion til at finde et ikke-absolut positioneret elements position:

function getPos(elm) {
    for(var zx=zy=0;elm!=null;zx+=elm.offsetLeft,zy+=elm.offsetTop,elm=elm.offsetParent);
    return {x:zx,y:zy}
}

Bruges sådan:
  var pos = getPos( ELEMENT_REFERENCE );
  alert( pos.x );
  alert( pos.y );
Avatar billede fritz-79th Nybegynder
11. februar 2003 - 15:45 #8
Ole du er verdensklasse!! - lige hvad jeg har brug for.
Tak endnu engang tak for de gode svar, hvor er det fedt at der er nogle der gider hjælpe os dødelige, der endnu ikke har den store forstand. :P
Avatar billede olebole Juniormester
11. februar 2003 - 16:12 #9
Rolig nu ... jeg har såmænd også mine redningsmænd, når jeg brænder sammen i en kode. Ingen af os er genier (desværre - hehe), men tak for rosen  :)
/mvh
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester