Avatar billede Slettet bruger
06. juni 2004 - 21:58 Der er 20 kommentarer og
2 løsninger

Lidt hjælp ønskers.

Hejsa.

Jeg er ved at modificere et news-script (som er i Javascript), men der er bare et problem: Det er placeret i øverste venstre hjørne af skærmen/dokumentet (en absolut placering).
Og da mit website er placeret "center" (en relativ placering), opstår der jo en konflikt.

Derfor tænker jeg: Kan man ikke bestemme placeringen ved at kaste hele scriptet ind i en div, som styres via CSS???
Avatar billede Slettet bruger
06. juni 2004 - 22:00 #1
jo :)

Men skal nok bruge lidt kode for at kunne give en løsning.
Avatar billede Slettet bruger
06. juni 2004 - 22:02 #2
Koderne er betragteligt lange... 2 stk. ret lange Javascripts + lidt html-kode, som kalder på dem.  Derfor har jeg ikke allerede smidt dem herind.

Men hvordan kan jeg styre placeringen via Div?
Avatar billede skovenborg Nybegynder
06. juni 2004 - 22:09 #3
det er nok lettest hvis du kan smide din menu ind i en div der er positioneret relative (eller absolut), fx:
<div style="position:relative;">--menu</div>

På den måde vil menuens absolute position blive udregnet i forhold til div'en og ikke selve vinduet
Avatar billede Slettet bruger
06. juni 2004 - 22:25 #4
Desværre, den er fuldstændig ligeglad.
Og jeg er også allerede klar over, at det skal placeres relativt.

Her er den CSS-kode jeg tester med:
#new {
position: relative;
top: 0px;
left: 0px;
padding: 10px;
margin: 20px;
background: #666;
border: 5px solid #ccc;
width: 400px; /* ie5win fudge begins */
voice-family: "\"}\"";
voice-family:inherit;
width: 370px;
}
html>body #content {
width: 370px; /* ie5win fudge ends */
}

Jeg frygter, at problemet ligger et andet sted.
Avatar billede Slettet bruger
06. juni 2004 - 22:27 #5
Jeg bliver nok nødt til at bruge nødløsningen: At benytte den kode som allerede ligger i Javascriptet om en absolut placering.

Derfor beder jeg jer om at lægge et svar, så jeg kan lukke dette spørgsmål, så jeg kan oprette et nyt i Javascript-afdelingen.
Avatar billede Slettet bruger
06. juni 2004 - 22:34 #6
Jeg har nu oprettet et lign. spørgsmål i javacript-afdelingen (http://www.eksperten.dk/spm/506788), så jeg lukker snart dette spørgsmål, når de sidste ting er på plads.
Avatar billede skovenborg Nybegynder
06. juni 2004 - 22:43 #7
tror du ikke det kunne løses med css alligevel??? Umiddelbart synes jeg ikke den javascriptløsning du søger er særlig velegnet i forhold til en eventuel css-løsning. Kunne det tænkes at du ikke har et link til den side du prøver det af på?
Avatar billede Slettet bruger
06. juni 2004 - 22:47 #8
skovenborg:
Ja, hvis det kan klares via CSS, vil jeg helst det.

Jeg har ikke mulighed for at installere mit FTP-program nu, men jeg kan kaste alle kildekoderne herind, selvom at det fylder en del... skal jeg det?
Avatar billede skovenborg Nybegynder
06. juni 2004 - 22:51 #9
tjaa, det kan du vel blive nødt til - men måske du kunne linke til den menu du bruger (hvis du ikke selv har lavet den ;-) hvis altså problemmet også kan opstå ved det. Men ellers er det i orden hvis du smider det hele - det er jo sket før her på eksperten ;-)
Avatar billede Slettet bruger
06. juni 2004 - 22:54 #10
Ok, her kommer det så:
___________________________________________________________
newsticker2.js :

if(screen.width==800){
x=200;                                                                        // Bredde på newsticker
}
else
if (screen.width>800) {
x=200;                                                                        // Bredde på newsticker

}
function NewsTicker(x,y,width,height) {
    this.name = 'NewsTicker'+(NewsTicker.count++)
    this.x = x
    this.y = y
    this.w = width
    this.h = 110                                                            // Højde på newsticker
    this.obj = this.name + "Object"
    eval(this.obj + "=this")
    this.items = new Array()
    this.scrollCount = 0

    this.pauseLength = 2000   
    this.inc = 2
    this.speed = 30
    this.fromX = 0
    this.fromY = this.h
    this.bgColor = null

    this.addItem = NewsTickerAddItem
    this.activate = NewsTickerActivate
    this.build = NewsTickerBuild
    this.start = NewsTickerStart
    this.stop = NewsTickerStop
    this.slide = NewsTickerSlide
}
function NewsTickerAddItem(text) {
    var i = this.items.length
    this.items[i] = new Object()
    this.items[i].text = text
}
function NewsTickerBuild() {
    this.css = css(this.name,this.x,this.y,this.w,this.h)
    this.div = '<div id="'+this.name+'">'
    for (var i=0;i<this.items.length;i++) {
        this.css += css(this.name+'Item'+i,0,0,this.w,this.h,this.bgColor,'hidden')
        this.div += '<div id="'+this.name+'Item'+i+'">'+this.items[i].text+'</div>'
    }
    this.div += '</div>'
}
function NewsTickerActivate(autostart) {
    for (var i=0;i<this.items.length;i++) {
        this.items[i].lyr = new DynLayer(this.name+'Item'+i)
        this.items[i].lyr.moveTo(this.fromX,this.fromY)
        this.items[i].lyr.show()
    }
    this.items[0].lyr.moveTo(0,0)
    this.lyr = new DynLayer(this.name)
    var num = Math.sqrt(Math.pow(this.fromX,2) + Math.pow(this.fromY,2))/this.inc
    this.dx = this.fromX/num || 0
    this.dy = this.fromY/num || 0
    if (autostart!=false) setTimeout(this.obj+'.start()',this.pauseLength)
}
function NewsTickerStart() {
    if (!this.started) {
    this.started = true
    var t = this.scrollCount
    var b = (this.scrollCount==this.items.length-1)? 0 : this.scrollCount+1
    var obj1 = this.items[t].lyr.obj
    var obj2 = this.items[b].lyr.obj
    this.timer = setInterval(this.obj+'.slide('+obj1+','+obj2+')',this.speed)
    }
}
function NewsTickerStop() {
    clearInterval(this.timer)
    this.started = false
}
function NewsTickerSlide(obj1,obj2) {
    obj1.moveBy(-this.dx,-this.dy)
    obj2.moveBy(-this.dx,-this.dy)
    if ((this.dx!=0 && Math.floor(obj2.x)==0) || (this.dy!=0 && Math.floor(obj2.y)==0)) {
        clearInterval(this.timer)
        obj1.moveTo(this.fromX,this.fromY)
        obj2.moveTo(0,0)
        this.scrollCount = (this.scrollCount==this.items.length-1)? 0 : this.scrollCount+1
        this.timer = setTimeout(this.obj+'.started=false;'+this.obj+'.start()',this.pauseLength)
    }
}
NewsTicker.count = 0

___________________________________________________________

dynlayer.js :


function DynLayer(id,nestref,frame) {
    if (!is.ns5 && !DynLayer.set && !frame) DynLayerInit()
    this.frame = frame || self
    if (is.ns) {
        if (is.ns4) {
            if (!frame) {
                if (!nestref) var nestref = DynLayer.nestRefArray[id]
                if (!DynLayerTest(id,nestref)) return
                this.css = (nestref)? eval("document."+nestref+".document."+id) : document.layers[id]
            }
            else this.css = (nestref)? eval("frame.document."+nestref+".document."+id) : frame.document.layers[id]
            this.elm = this.event = this.css
            this.doc = this.css.document
        }
        else if (is.ns5) {
            this.elm = document.getElementById(id)
            this.css = this.elm.style
            this.doc = document
        }

        this.x = this.css.left
        this.y = this.css.top
        this.w = this.css.clip.width
        this.h = this.css.clip.height
    }
    else if (is.ie) {
        this.elm = this.event = this.frame.document.all[id]
        this.css = this.frame.document.all[id].style
        this.doc = document
        this.x = this.elm.offsetLeft
        this.y = this.elm.offsetTop
        this.w = (is.ie4)? this.css.pixelWidth : this.elm.offsetWidth
        this.h = (is.ie4)?this.css.pixelHeight : this.elm.offsetHeight
    }
    this.id = id
    this.nestref = nestref
    this.obj = id + "DynLayer"
    eval(this.obj + "=this")
}
function DynLayerMoveTo(x,y) {
    if (x!=null) {
        this.x = x
        if (is.ns) this.css.left = this.x
        else this.css.pixelLeft = this.x
    }
    if (y!=null) {
        this.y = y
        if (is.ns) this.css.top = this.y
        else this.css.pixelTop = this.y
    }
}
function DynLayerMoveBy(x,y) {
    this.moveTo(this.x+x,this.y+y)
}
function DynLayerShow() {
    this.css.visibility = (is.ns4)? "show" : "visible"
}
function DynLayerHide() {
    this.css.visibility = (is.ns4)? "hide" : "hidden"
}
DynLayer.prototype.moveTo = DynLayerMoveTo
DynLayer.prototype.moveBy = DynLayerMoveBy
DynLayer.prototype.show = DynLayerShow
DynLayer.prototype.hide = DynLayerHide
DynLayerTest = new Function('return true')

// DynLayerInit Function
function DynLayerInit(nestref) {
    if (!DynLayer.set) DynLayer.set = true
    if (is.ns) {
        if (nestref) ref = eval('document.'+nestref+'.document')
        else {nestref = ''; ref = document;}
        for (var i=0; i<ref.layers.length; i++) {
            var divname = ref.layers[i].name
            DynLayer.nestRefArray[divname] = nestref
            var index = divname.indexOf("Div")
            if (index > 0) {
                eval(divname.substr(0,index)+' = new DynLayer("'+divname+'","'+nestref+'")')
            }
            if (ref.layers[i].document.layers.length > 0) {
                DynLayer.refArray[DynLayer.refArray.length] = (nestref=='')? ref.layers[i].name : nestref+'.document.'+ref.layers[i].name
            }
        }
        if (DynLayer.refArray.i < DynLayer.refArray.length) {
            DynLayerInit(DynLayer.refArray[DynLayer.refArray.i++])
        }
    }
    else if (is.ie) {
        for (var i=0; i<document.all.tags("DIV").length; i++) {
            var divname = document.all.tags("DIV")[i].id
            var index = divname.indexOf("Div")
            if (index > 0) {
                eval(divname.substr(0,index)+' = new DynLayer("'+divname+'")')
            }
        }
    }
    return true
}
DynLayer.nestRefArray = new Array()
DynLayer.refArray = new Array()
DynLayer.refArray.i = 0
DynLayer.set = false

// Slide Methods
function DynLayerSlideTo(endx,endy,inc,speed,fn) {
    if (endx==null) endx = this.x
    if (endy==null) endy = this.y
    var distx = endx-this.x
    var disty = endy-this.y
    this.slideStart(endx,endy,distx,disty,inc,speed,fn)
}
function DynLayerSlideBy(distx,disty,inc,speed,fn) {
    var endx = this.x + distx
    var endy = this.y + disty
    this.slideStart(endx,endy,distx,disty,inc,speed,fn)
}
function DynLayerSlideStart(endx,endy,distx,disty,inc,speed,fn) {
    if (this.slideActive) return
    if (!inc) inc = 300
    if (!speed) speed = 20
    var num = Math.sqrt(Math.pow(distx,2) + Math.pow(disty,2))/inc
    if (num==0) return
    var dx = distx/num
    var dy = disty/num
    if (!fn) fn = null
    this.slideActive = true
    this.slide(dx,dy,endx,endy,num,1,speed,fn)
}
function DynLayerSlide(dx,dy,endx,endy,num,i,speed,fn) {
    if (!this.slideActive) return
    if (i++ < num) {
        this.moveBy(dx,dy)
        this.onSlide()
        if (this.slideActive) setTimeout(this.obj+".slide("+dx+","+dy+","+endx+","+endy+","+num+","+i+","+speed+",\""+fn+"\")",speed)
        else this.onSlideEnd()
    }
    else {
        this.slideActive = false
        this.moveTo(endx,endy)
        this.onSlide()
        this.onSlideEnd()
        eval(fn)
    }
}
function DynLayerSlideInit() {}
DynLayer.prototype.slideInit = DynLayerSlideInit
DynLayer.prototype.slideTo = DynLayerSlideTo
DynLayer.prototype.slideBy = DynLayerSlideBy
DynLayer.prototype.slideStart = DynLayerSlideStart
DynLayer.prototype.slide = DynLayerSlide
DynLayer.prototype.onSlide = new Function()
DynLayer.prototype.onSlideEnd = new Function()

// Clip Methods
function DynLayerClipInit(clipTop,clipRight,clipBottom,clipLeft) {
    if (is.ie) {
        if (arguments.length==4) this.clipTo(clipTop,clipRight,clipBottom,clipLeft)
        else if (is.ie4) this.clipTo(0,this.css.pixelWidth,this.css.pixelHeight,0)
    }
}
function DynLayerClipTo(t,r,b,l) {
    if (t==null) t = this.clipValues('t')
    if (r==null) r = this.clipValues('r')
    if (b==null) b = this.clipValues('b')
    if (l==null) l = this.clipValues('l')
    if (is.ns) {
        this.css.clip.top = t
        this.css.clip.right = r
        this.css.clip.bottom = b
        this.css.clip.left = l
    }
    else if (is.ie) this.css.clip = "rect("+t+"px "+r+"px "+b+"px "+l+"px)"
}
function DynLayerClipBy(t,r,b,l) {
    this.clipTo(this.clipValues('t')+t,this.clipValues('r')+r,this.clipValues('b')+b,this.clipValues('l')+l)
}
function DynLayerClipValues(which) {
    if (is.ie) var clipv = this.css.clip.split("rect(")[1].split(")")[0].split("px")
    if (which=="t") return (is.ns)? this.css.clip.top : Number(clipv[0])
    if (which=="r") return (is.ns)? this.css.clip.right : Number(clipv[1])
    if (which=="b") return (is.ns)? this.css.clip.bottom : Number(clipv[2])
    if (which=="l") return (is.ns)? this.css.clip.left : Number(clipv[3])
}
DynLayer.prototype.clipInit = DynLayerClipInit
DynLayer.prototype.clipTo = DynLayerClipTo
DynLayer.prototype.clipBy = DynLayerClipBy
DynLayer.prototype.clipValues = DynLayerClipValues

// Write Method
function DynLayerWrite(html) {
    if (is.ns) {
        this.doc.open()
        this.doc.write(html)
        this.doc.close()
    }
    else if (is.ie) {
        this.event.innerHTML = html
    }
}
DynLayer.prototype.write = DynLayerWrite

// BrowserCheck Object
function BrowserCheck() {
    var b = navigator.appName
    if (b=="Netscape") this.b = "ns"
    else if (b=="Microsoft Internet Explorer") this.b = "ie"
    else this.b = b
    this.version = navigator.appVersion
    this.v = parseInt(this.version)
    this.ns = (this.b=="ns" && this.v>=4)
    this.ns4 = (this.b=="ns" && this.v==4)
    this.ns5 = (this.b=="ns" && this.v==5)
    this.ie = (this.b=="ie" && this.v>=4)
    this.ie4 = (this.version.indexOf('MSIE 4')>0)
    this.ie5 = (this.version.indexOf('MSIE 5')>0)
    this.min = (this.ns||this.ie)
}
is = new BrowserCheck()

// CSS Function
function css(id,left,top,width,height,color,vis,z,other) {
    if (id=="START") return '<STYLE TYPE="text/css">\n'
    else if (id=="END") return '</STYLE>'
    var str = (left!=null && top!=null)? '#'+id+' {position:absolute; left:'+left+'px; top:'+top+'px;' : '#'+id+' {position:relative;'
    if (arguments.length>=4 && width!=null) str += ' width:'+width+'px;'
    if (arguments.length>=5 && height!=null) {
        str += ' height:'+height+'px;'
        if (arguments.length<9 || other.indexOf('clip')==-1) str += ' clip:rect(0px '+width+'px '+height+'px 0px);'
    }
    if (arguments.length>=6 && color!=null) str += (is.ns)? ' layer-background-color:'+color+';' : ' background-color:'+color+';'
    if (arguments.length>=7 && vis!=null) str += ' visibility:'+vis+';'
    if (arguments.length>=8 && z!=null) str += ' z-index:'+z+';'
    if (arguments.length==9 && other!=null) str += ' '+other
    str += '}\n'
    return str
}
function writeCSS(str,showAlert) {
    str = css('START')+str+css('END')
    document.write(str)
    if (showAlert) alert(str)
}
___________________________________________________________

index.html :


<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>test</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<script type="text/javascript" language="JavaScript" src="js/dynlayer.js"></script>
<script type="text/javascript" language="JavaScript" src="js/newsticker2.js"></script>

<script language=JavaScript>
<!--
var str = '<span class="news_red";>'
    str=str +'<br />2003.05.16 :</span><hr width="100%" size="1" noshade /><span class="news";>Sortimentet af CMS-systemer bliver nu udvidet og forbedret.<br />Vi er blevet endnu mere leveringsdygtige.'
    str = str + '</span>'
    var i0 =  str
        var str = '<span class="news_red";>'
    str=str +'<br />2003.04.03 :</span><hr width="100%" size="1" noshade /><span class="news";>Vi expanderer. Endnu en programmør er tilknyttet bureauet på freelance-basis, til konkurrencedygtige priser og betingelser.'
    str = str + '</span>'
    var i1 =  str
    var str = '<span class="news_red";>'
    str=str +'<br />2003.03.22 :</span><hr width="100%" size="1" noshade /><span class="news";>Bla bla bla'
    str = str + '</span>'
    var i2 =  str   
    ticker = new NewsTicker(492,30,200,110)  // absolutte størrelser:  Placering fra v. hjørne top - bredde - højde.
    ticker.addItem(i0)
    ticker.addItem(i1)
    ticker.addItem(i2)
    ticker.build()

writeCSS(
ticker.css
)
//-->
</script>

<style type="text/css">   
#new {
position: relative;
top: 0px;
left: 0px;
padding: 10px;
margin: 20px;
background: #666;
border: 5px solid #ccc;
width: 400px; /* ie5win fudge begins */
voice-family: "\"}\"";
voice-family:inherit;
width: 370px;
}
html>body #content {
width: 370px; /* ie5win fudge ends */
}
</style>

</head>

<body>


<div id="new">
<script language=JavaScript> document.write(ticker.div)</script>
<script language=JavaScript> ticker.activate(); </script>
</div>

</body>
</html>
Avatar billede skovenborg Nybegynder
06. juni 2004 - 23:13 #11
det er den der lille grå boks der skal centreres ikke - eller hvad den nu skal
Avatar billede Slettet bruger
06. juni 2004 - 23:16 #12
Det er:
<div id="new">
<script language=JavaScript> document.write(ticker.div)</script>
<script language=JavaScript> ticker.activate(); </script>
</div>
som kalder på scriptet, så det er denne div som jeg gerne vil kunne styre.
Avatar billede skovenborg Nybegynder
06. juni 2004 - 23:25 #13
hmm, jeg kan ikke helt se problemmet, men jeg ved jo heller ikke hvordan du vil have dem styret. Du kan jo sagtens ændre på top og left i din #new-div og dermed flytte rundt på boksene
Avatar billede Slettet bruger
06. juni 2004 - 23:44 #14
Well, hvis du prøver at køre scriptet, vil du hurtigt se, at det opføer sig som det vil, og ikke lystrer hvordan jeg definerer Div-en. Det er det som er problemet.
Avatar billede frosteyes Nybegynder
07. juni 2004 - 00:42 #15
Hejsa.
Jeg synes ikke rigtig jeg kan se problemet. Din CSS del som kører rundt med menuen fungerer fint nok af hvad jeg kan se.

Prøv at bruge følgende html-kode i stedet for din:

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>test</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<script type="text/javascript" language="JavaScript" src="dynlayer.js"></script>
<script type="text/javascript" language="JavaScript" src="newsticker2.js"></script>

<script language=JavaScript>
<!--
var str = '<span class="news_red";>'
    str=str +'<br />2003.05.16 :</span><hr width="100%" size="1" noshade /><span 
class="news";>Sortimentet af CMS-systemer bliver nu udvidet og forbedret.<br />Vi er blevet endnu 
mere leveringsdygtige.'
    str = str + '</span>'
    var i0 =  str
        var str = '<span class="news_red";>'
    str=str +'<br />2003.04.03 :</span><hr width="100%" size="1" noshade /><span class="news";>Vi 
expanderer. Endnu en programmør er tilknyttet bureauet på freelance-basis, til konkurrencedygtige 
priser og betingelser.'
    str = str + '</span>'
    var i1 =  str
    var str = '<span class="news_red";>'
    str=str +'<br />2003.03.22 :</span><hr width="100%" size="1" noshade /><span class="news";>Bla 
bla bla'
    str = str + '</span>'
    var i2 =  str   
    ticker = new NewsTicker(0,0,200,110)  // absolutte størrelser:  Placering fra v. hjørne top - 
bredde - højde.
    ticker.addItem(i0)
    ticker.addItem(i1)
    ticker.addItem(i2)
    ticker.build()

writeCSS(
ticker.css
)
//-->
</script>

<style type="text/css">   
#new {
position: relative;
top: 50px;
left: 10px;
margin: 0px 0px 0px 0px;
padding: 0px 0px 0px 0px;
background: #666;
border: 5px solid #ccc;
height: 130px;
width: 220px; /* ie5win fudge begins */
voice-family: "\"}\"";
voice-family:inherit;
width: 220px;
}

</style>

</head>

<body>


<div id="new">
<script language=JavaScript> document.write(ticker.div)</script>
<script language=JavaScript> ticker.activate(); </script>
</div>

</body>
</html>

Har ændret lidt på CSS koden, og på følgende linie i JavaScriptet.
    ticker = new NewsTicker(0,0,200,110)  // absolutte størrelser:  Placering fra v. hjørne top - 
bredde – højde

Ellers se følgende links for hjælp til CSS delen. http://www.html.dk/tutorials/css/ , og http://www.w3.org/TR/CSS21/

Prøv evt. at se på følgende linie i JavaScript koden

var str = (left!=null && top!=null)? '#'+id+' {position:absolute; left:'+left+'px; top:'+top+'px;' : '#'+id+' {position:relative;'

Hvis ikke dette hjælper dig, så prøv at præciser dit problem. Hvis du ikke giver os noget at arbejde med, er du svær at hjælpe.
Avatar billede Slettet bruger
18. juli 2004 - 17:34 #16
frosteyes + skovenborg:
Gidder I at lægge et svar, så jeg kan få afsluttet dette spørgsmål?
Avatar billede Slettet bruger
23. juli 2004 - 21:45 #17
frosteyes + skovenborg:
Gidder I at lægge et svar, så jeg kan få afsluttet dette spørgsmål?
Avatar billede frosteyes Nybegynder
25. juli 2004 - 14:09 #18
svar :o)
Avatar billede roenving Novice
25. juli 2004 - 14:18 #19
-- jeg har på fornemmelsen at Ulrik (skovenborg) er på ferie !-)
Avatar billede skovenborg Nybegynder
02. august 2004 - 23:33 #20
korrekt roenving :-)
Avatar billede Slettet bruger
04. august 2004 - 10:59 #21
Tak for hjælpen! :-)
Avatar billede skovenborg Nybegynder
04. august 2004 - 13:06 #22
og tak for points :-)
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