HTML
Børre Stenseth
Struktur >Et eksperiment

Et eksperiment

Hva

I denne modulen skal vi gjøre et litt sært eksperiment. Hensikten er å prøve å få kontroll over posisjonene til elementer som er plassert på litt forskjellig måte.

Vi ønsker å markere elementer ved å klikke på dem. Markeringen skal bestå i at vi plasserer et img-element i øvre venstre hjørne. Dette img-elementet er ikke koplet til elementet det markerer i boksmodellen. Det er plassert som barn av body-elementet. Utfordingen blir altså å sørge for av markering henger med elementet det markerer. Dette er selvsagt en ekstremt klønete måte å løse markeringsproblemet på. Problemet kan løses veldig mye enklere ved å toggle style ved klikk, se modulen Alternativ

Klikk på en av grønne tekstene eller blå boksene, og klikk en gang til for å fjerne markeringen. Markeringene skal overleve scroll, rezise og toggling av menyen til venstre

Jeg har 5 barn med forskjellig plassering
Jeg har negativ margin
Jeg er relativ
Jeg er absolute
Jeg er fixed (sorry)
Jeg bare er her
Vi er i en flex-box
alle
bs
fire

Jeg bruker navnene markable og marked i klasselista til de markerbare elementene. Disse to klassenavnene brukes bare til angivelse av status, og representerer ikke noe stilbeskrivelse. (Det er selvsagt her vi kunne løst oppgaven svært enkelt, ved ganske enkelå toggle marked)

I utgangspunktet er det en enkel måte å finne et elements plassering i vinduet.

 var rect = element.getBoundingClientRect();

der rect har properties: left, top, right, bottom. Problemet er at dette ikke holder dersom plasseringsegenskapen til elementet ikke er fixed og vi har scrollet vinduet eller endret størrelse på det. For å få kontroll over dette kan vi bruke følgende funksjon for å finne top og left. (fra kirupa [1] )

function getOffset( elt ) {
    var x = 0;
    var y = 0;
    while( elt && !isNaN( elt.offsetLeft ) && !isNaN( elt.offsetTop ) ) {
        x += elt.offsetLeft - elt.scrollLeft;
        y += elt.offsetTop - elt.scrollTop;
        elt = elt.offsetParent;
    }
    return { top: y, left: x };
}

Jeg benytter meg også av funksjonen:

 window.getComputedStyle()

for å finne ut hva som er den aktuelle egenskapen til et element. Dette er altså det samme som utviklerverktøyet i nettleseren viser når vi ber om å få se den effektive (computed) verdien for stilegenskapene til et element. Se MSD [2] for en bedre forklaring.

Javascriptet

_markers.js

Stilsettet

_markers.css
[3]
Referanser
  1. Get an Element's Position Using JavaScript kirupa www.kirupa.com/html5/get_element_position_using_javascript.htm 14-08-2016
  1. getComputedStyle MDN developer.mozilla.org/en-US/docs/Web/API/Window/getComputedStyle 14-08-2016
  1. HTML5 w3.org dev.w3.org/html5/spec/Overview.html 14-03-2011
Struktur >Et eksperiment