05. februar 2005 - 17:25Der er
8 kommentarer og 1 løsning
Tilfældig position og skriftstørrelse
Hey! Jeg har lært sådan lidt om JavaScript, men kan næsten intet i det. I dag fik jeg så en ide om at lave noget "kunst" i Javascript. Jeg ville lave mange, fx 100, R'ere i et afgrænset område. Altså alle R'erne skal være i en usynlig boks på fx 400*300px og inde i det område skal der være en masse R'ere. Placeringerne på disse R'ere skal bare være tilfældigt og skriftstørrelsen på alle disse R'ere skal bare være fra alt mellem 10-50px. Jeg prøvede noget, men det lykkedes slet ikke at få noget frem... Måske kan I hjælpe?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
yups ... funktionen tager tre argumenter: antal bogstaver, min. skriftstørrelse og max. skriftstørrelse.
I linien: var sp, txt, cont = document.getElementById("container"); erklærer vi, at vi senere vil bruge tre forskellige, lokale variabler (variabler, kun funktionen kan 'se') - og i den sidste variabel lægger vi en reference til div'et.
I linien: for (i=0; i<50; i++) { har jeg været lidt dum, for den burde have heddet: for (i=0; i<numOfChars; i++) { hvilket betyder at det, der står mellem 'tuborgerne' skal udføres 'numOfChars' gange.
Linien: sp = document.createElement("span"); opretter et span (der er 'frit i luften svævende'. Det er endnu ikke indsat i dokumentet).
Linien: txt = document.createTextNode("R"); opretter tilsvarende en tekstnode med indholdet 'R'.
Linien: sp.style.position = "absolute"; sætter spannets position til 'absolute'
Linien: sp.style.fontSize = (Math.round(Math.random()*(maxSize-minSize))+minSize)+"px"; udregner en tilfældig skriftstørrelse mellem min- og max-størrelsen
Linien: sp.appendChild(txt); klistrer tekstnoden ind i spannet
Linien: cont.appendChild(sp); klistrer spannet ind i container-div'et
Linien: sp.style.left = (Math.round(Math.random()*(cont.offsetWidth-sp.offsetWidth)))+"px"; beregner en tilfældig venstre-placering udfra bredden af container-div'et og spannet
Linien: sp.style.top = (Math.round(Math.random()*(cont.offsetHeight-sp.offsetHeight)))+"px"; gør det samme - blot er det her top-placeringen, vi beregner
Funktionen kaldes med sine argumenter i det øjeblik, siden er færdig-loaded: window.onload = function() { populateContainer(50, 10, 50); }
Selvtak. Lige en ekstra bemærkning til udregningen af placeringen af spannet: Hvis du opfatter div'et som et koordinatsystem, skal vi have anbragt spannets øverste, venstre hjørne i et tilfældigt koordinatsæt (left, top).
JavaScript har et matematik-objekt 'Math' med nogle metoder på. Math.round(3.74) vil således afrunde og returnere 3. Math.random() returnerer et tilfældigt decimaltal mellem 0 og 1.
Øverste venstre hjørne af spannet skal altså (i vandret retning) ligge mellem 0 og rammens bredde minus spannets bredde. Så vil bogstavet holde sig indenfor rammen. Et elements bredde kan findes med HTML_ELEMENT.offsetWidth Derfor kommer regnestykket for X-koordinaten altså til at se sådan ud: Math.round( Math.random()*(cont.offsetWidth-sp.offsetWidth) )
Grunden til, vi først sætter left- og top-værdierne så sent i scriptet, er i øvrigt, at vi først skal have klistret teksten ind i spannet og spannet ind i rammen, før det giver mening at spørge om spannets fysiske dimensioner. En god regel er at gøre elementet så færdigt som muligt, inden det klistres ind i dokumentet og dermed bliver synligt - og så foretage de sidste nødvendige justeringer.
Giver det mening, kan du nok selv gennemskue, hvordan vi kommer frem til top (Y) koordinaten ;o)
En enkelt rettelse til div'et. Det skal være positioneret ... enten 'absolute' eller 'relative'. Normalt vil man nok positionere det 'relative', da men så kan lægge det i kodens normale flow - i en tabel-celle eller andet element:
Gør du ikke det, vil span'ene placere sig i forhold til dokumentets koordinatsytems (0,0). Left og top udregnes nemlig udfra det første, positionerede, omkransende element ... i sidste ende <body> Det ser du ikke, sålænge div'et ligger i øverste, venstre hjørne - men først når du flytter på det ;o)
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.