5.1 Koordinater och gränser
Ett element kan positioneras genom att man i CSS ger det absolut positionering och sedan placerar det med önskade värden i egenskaperna top
och left
. Ska det ske inom ett omgivande element, ges det omgivande elemnetet en relativ positionering. I JavaScript kan man ändra värdena i top
och left
, för att flytta elementet. För att avgöra position och storlek finns det också några andra egenskaper och metoder som tas upp i detta exempel. Exemplet består av tre delar:
- Olika sätt att avläsa ett elements position och storlek.
- Program som kontrollerar om två element överlappar varandra. Kan användas för "krocktest".
- Förflyttning av ett element, då användaren klickar på knappar eller trycker ner tangenter.
33 min.
Sammanfattning
- Med
left
,top
, etc. anges positionen i en enhet, t.ex.px
för pixlar. Ska man lägga in nya värden måste man alltså lägga in både värdet och enheten. Avläser man värdet, kan man ta bort enheten medparseInt()
. Man kan både läsa och skrivaleft
,top
, etc. - Med
offsetLeft
,offsetTop
, etc. erhålls positionen i pixlar. Värdet för egenskapen innehåller alltså endast ett tal utan enhet. Positionen är inom det omgivande elementet, där man utgår från 0,0 för det övre vänstra hörnet. EgenskapernaoffsetLeft
, etc. kan endast läsas, så man kan inte använda dem för att lägga in nya värden. - Med
getBoundingClientRect()
får man ett objekt som innehåller egenskapernaleft
,top
,right
,bottom
,x
,y
,width
ochheight
.x
är lika medleft
ochy
är lika medtop
.
Egna övningar
Här följer ett förslag på några egna övningar. Öppna filen test.html och test.js och utför följande:
- Då man klickar på knappen, anropas funktionen
newBall
. Skriv kod, så att det slumpmässigt bestäms en ny position för bollen inom ytan för "playGround". Bollen ska placeras minst 40px från kanten.- Med
getBoundingClientRect()
kan du ta framwidth
ochheight
både för den stora ytan och bollen, för att kunna bestämma övre gränser i slumptalsberäkningen av nya värden förleft
ochtop
för bollen. - Börja med att endast bestämma nytt värde för
left
. Då du sedan fått det att fungera, blir koden för att bestämmatop
nästan likadan, fast du använder dåheight
istället förwidth
.
- Med