Avatar billede engrob Nybegynder
27. september 2000 - 16:59 Der er 22 kommentarer og
1 løsning

z-index op ved onclick

Er det muligt at lave et script, der sætter z-index på et lag højere op ved fx et onclick?
Avatar billede nixen Nybegynder
27. september 2000 - 17:09 #1
kan du ikke bare:
<html><head><script language=\"Javascript\">
function setZ(elem) {
elem.zIndex++
}
function document_onload() {
IE = document.all? true:false;
theElem = IE? document.all[\'aDiv\']:document.aDiv
theElemCSS = IE? theElem.style:theElem;
if (!IE) theElem.captureEvents(Event.CLICK)
theElem.onclick = setZ(theElemCSS)
}
</script></head><body onload=\"document_onload()\">
<div id=aDiv>Hejsa</div>
</body></html>
Avatar billede engrob Nybegynder
28. september 2000 - 17:44 #2
Jeg er ikke helt sikker på at jeg kan få det til at virke.
Jeg har nogle links der åbner nogen nye lag. Hvis jeg fx trykker på 1. link så kommer der et lag frem, og hvis jeg klikker på 2. link så kommer der et nyt lag op oven på det første lag.
Men hvis jeg så åbner 2. link først og derefter 1. link så lægger 1. lag sig bag 2. lag og det er jo ikke så smart. Så jeg tænkte om man ikke kunne lave noget lignende det her:

<div onClick=\"z-index-up()\"></div>

<a href=\"\" onClick=\"z-index-up()\"></a>
Avatar billede nixen Nybegynder
30. september 2000 - 22:52 #3
Jeg er ikke helt sikker på om dette er hvad du mener, men:
<a href=\"java script:zUp(0)\">Åbn lag 0</a>
<a href=\"java script:zUp(1)\">Åbn lag 1</a>
etc.
function zUp(lag) {
for (i in arrayOfLayers) {
theElem = eval(\'lag\'+i);
theElem.style.zIndex = i==lag? 10:0
}
}
hvor arrayOfLayers er en array der bruges til at indeholde dine lag, men i dette eksempel ikke bruges til andet end at tælle lagene..
Avatar billede engrob Nybegynder
01. oktober 2000 - 13:14 #4
Jeg er ret ny js.
Skal div\'en så have en id der hedde
\'lag1\'
eller hva.
Avatar billede helle_fred Nybegynder
02. oktober 2000 - 09:47 #5
if(document.layers)lag.zIndex=n
else if(document.all)lag.style.zIndex=n

- hvor n er det ønskede zIndex og lag er ID på dit lag.
Avatar billede helle_fred Nybegynder
02. oktober 2000 - 10:05 #6
..... en gang til:

  if(document.layers)document.lag.zIndex=n
else if(document.all)document.all.lag.style.zIndex=n


Avatar billede engrob Nybegynder
09. oktober 2000 - 21:58 #7
Undskyld jeg ikke lige har svaret.
Der er ikke noget af det jeg kan få til at virke, men hvis der er en der kan lave det og forklare det godt så ville jeg blive meget glad.
Avatar billede engrob Nybegynder
11. oktober 2000 - 18:41 #8
Nå, så lukker jeg bare.
Avatar billede nixen Nybegynder
11. oktober 2000 - 18:44 #9
nejnej, jeg sidder lige og roder med det lige nu!
:-(
Avatar billede nixen Nybegynder
11. oktober 2000 - 18:56 #10
Jeg er ikke 100% safe på at det er det her du vil have, men check det lige :)


<html>
<head>
<style type=text/css>
#aDiv {
    TOP:10;
    LEFT:10;
    LAYER-BACKGROUND-COLOR:#6666ff;
    BACKGROUND-COLOR:#6666ff;
    Z-INDEX:0;
}
#bDiv {
    TOP:30;
    LEFT:30;
    LAYER-BACKGROUND-COLOR:#66ff66;
    BACKGROUND-COLOR:#66ff66;
    Z-INDEX:1;
}
#cDiv {
    TOP:50;
    LEFT:50;
    LAYER-BACKGROUND-COLOR:#ff6666;
    BACKGROUND-COLOR:#ff6666;
    Z-INDEX:2;
}
.etLag {
    POSITION:absolute;
    WIDTH:100;
    HEIGHT:100;
    CLIP:rect(0px 100px 100px 0px);
}
</style>
<script language=\"Javascript\">
function document_onload() {
    IE = document.all? true:false;
    fnBuildCrossBrowserReferences()
    fnSetEvents()
}
function fnBuildCrossBrowserReferences() {
    // her bygger vi referencer der virker til både Netscape og IE
    aDivCBR = IE? aDiv:document.aDiv;
    bDivCBR = IE? bDiv:document.bDiv;
    cDivCBR = IE? cDiv:document.cDiv;
   
    aDivCSS = IE? aDiv.style:aDivCBR;
    bDivCSS = IE? bDiv.style:bDivCBR;
    cDivCSS = IE? cDiv.style:cDivCBR;
   
    // og laver lige et array af lag..
    lag = new Array()
    lag[0] = new Array;
    lag[0][0] = aDivCBR;
    lag[0][1] = aDivCSS;
    lag[1] = new Array()
    lag[1][0] = bDivCBR;
    lag[1][1] = bDivCSS;
    lag[2] = new Array()
    lag[2][0] = cDivCBR;
    lag[2][1] = cDivCSS;
}

function fnSetEvents() {
    // her fanger vi onclick-events\'ne
    // og sætter handlers på
    for (i in lag) {
        if (!IE) lag[i][0].captureEvents(Event.CLICK);
        lag[i][0].onclick = new Function(\"e\",\"fnClick(\"+i+\")\");
    }
}
function fnClick(objNum) {
    for (i in lag) {
        if (lag[objNum][1].zIndex<lag[i][1].zIndex) lag[i][1].zIndex=(lag[i][1].zIndex-1)
    }
    lag[objNum][1].zIndex=lag.length;
}
</script>
</head>
<body onload=\"document_onload()\">
<div id=aDiv class=etLag>Jeg er div A</div>
<div id=bDiv class=etLag>Jeg er så div B</div>
<div id=cDiv class=etLag>Og jeg hedder div C</div>
</body>
</html>

Ideen er at det lag der trykkes på bliver sat forrest, mens de andre lag beholder deres indbyrdes zIndex rækkefølge; det er derfor jeg har lavet den der if-sætning i fnClick - den tester simpelthen om det lag der bliver løbet igennem har højere zIndex end det man har trykket på..
Virker i IE og NS 4+
Avatar billede nixen Nybegynder
11. oktober 2000 - 18:57 #11
Forresten, grunden til at jeg både bruger LAYER-BACKGROUND-COLOR og BACKGROUND-COLOR, såvel som CLIP i stylesheetet er netop for at få det til at fungere i netscape også :)
Avatar billede engrob Nybegynder
11. oktober 2000 - 19:01 #12
Hov. Hvis jeg kan få det til at virke så opretter jeg lige et spørgsmål med de 250 p.
Avatar billede nixen Nybegynder
11. oktober 2000 - 19:05 #13
hvis det ikke virker som du vil ha\' det til kan du jo lige lave en kommentar med en forklaring på hvad der er galt.. Jeg har testet det i IE 5.0 og NS 4.7, men det er standard DOM så der burde ikke være problemer med browsere 4+ :)
Avatar billede engrob Nybegynder
11. oktober 2000 - 19:07 #14
Hvad nu hvis jeg i forvejen har et id på mine lag??
Avatar billede nixen Nybegynder
11. oktober 2000 - 19:15 #15
alle steder hvor der står noget med \"aDiv\" skal så ændres til ditDivNavn. Pointen er at jeg refererer objekterne vha. et array (det gør det nu lidt lettere..). Dette array skal så opdateres til at indeholde referencer til dine div/span/hvadsomhelst.
f.eks skal en div der hedder
<div id=nytNavn class=etLag>
så medføre
(i scriptet)
nytNavnCBR = IE? nytNavn:document.nytNavn;
nytNavnCSS = IE? nytNavn.style:nytNavnCBR;
lag[(værdi svarende til længden af elementer i lag)][0] = nytNavnCBR;
lag[(værdi svarende til længden af elementer i lag)][1] = nytNavnCSS;

(i stylesheetet)
#nytNavn {
TOP:(værdi)
LEFT:(værdi)
LAYER-BACKGROUND-COLOR:(værdi)
BACKGROUND-COLOR:(værdi)
CLIP:(værdi der bør svare til WIDTH og HEIGHT)
}
Avatar billede nixen Nybegynder
11. oktober 2000 - 19:17 #16
meningen er at du kan tilføje og fjerne ligeså mange lag du lyster HVIS du bare husker at bygge/fjerne referencerne til dem..
Avatar billede engrob Nybegynder
11. oktober 2000 - 21:45 #17
Jeg har i forvejen nogen <div>\'er der har et id der hedder noget i retningen af id=\"win(1)\". Så kan jeg jo ikke bare gå ind og skrive noget andet i id for så er der noget ander der ikke virker.

Det kan godt være jeg ikke helt har fattet hvad det er du har skrevet :-)
Avatar billede engrob Nybegynder
12. oktober 2000 - 17:25 #18
Jeg lover du får dine points
Avatar billede nixen Nybegynder
12. oktober 2000 - 17:34 #19
<Jeg har først lige haft tid nu>
hmmmm... Uden at være 100% sikker tror jeg ikke det er en særligt god ide at have ID\'er med paranteser som \"divID(tal)\".. Du kan f.eks bruge win1, win2...winX istedet for..
Men, selvfølgelig, hvis det ikke har givet dig nogle problemer så går det jo nok alligevel :)

Det jeg mente var heller ikke at du skulle rename dine divID\'er men tværtimod at du kan beholde dem hvis du så bare ændrer referencen i scriptet..
Måske kan man forklare det sådan her:
Scriptet har nogle referencer der PEGER PÅ de lag der skal opføre sig på en bestemt måde (altså i dette tilfælde ændre zIndex ved onclick). For at det skal fungere skal du så hive i scriptets pegefinger for at få den til at referere de ønskede objekter, f.eks win1, win2, win3 osv.. osv..

Mht. point.. Altså, selvom det da er en rar bonus er det jo ikke derfor man gider at hjælpe folk - det er ligeså fedt hvis man kan hjælpe med at få dem til at komme lidt videre og måske forstå noget de ikke forstod før..
kort sagt: \"don\'t worry!\"
Jeg vil da gerne have point, men det er ikke afgørende.
Avatar billede engrob Nybegynder
12. oktober 2000 - 21:15 #20
Okai,

Forresten så havde jeg også kun skrevet id=win1.
Det kan godt være jeg er lidt svær at gøre tilfreds, men jeg er altså ikke særlig god til javascript.

Jeg har dette her script i forvejen:

<script>
function vis(i){
    if (document.layers)
      document.layers[\"win\"+i].visibility=\'show\';
    else
      document.all[\"win\"+i].style.visibility=\'visible\';
  }
function gem(i){
    if (document.layers)
      document.layers[\"win\"+i].visibility=\'hide\';
    else
      document.all[\"win\"+i].style.visibility=\'hidden\';
  }
</script>

Det kan du se at den der \"win\"+i er id\'en.
Skal jeg så have den kode flettet sammen med din kode på en eller anden måde???

Avatar billede engrob Nybegynder
12. oktober 2000 - 21:17 #21
Forresten er det så muligt at gøre det sådan at links sætter z-index op når man trykker på dem.

se her:
Kommentar fra engrob 
28-09 2000 17:44:27 

Avatar billede nixen Nybegynder
13. oktober 2000 - 08:07 #22
aha - i virkeligheden er det du skal gøre ikke at vise lag oven på hinanden, men bare at vise et lag ad gangen? Det eksempel jeg har lavet gør ikke præcist sådan, det laver nærmere en \"når-du-trykker-på-mig-kommer-jeg-øverst-i-bunken\" effekt.
Arrrhhhh... nu har jeg jo lige set din kommentar fra 28-08 2000... Ok... Ved du hvad, lur mig om ikke jeg kan få tid til at lave et ready-made eksempel til dig i løbet af idag eller imorgen :)
Avatar billede engrob Nybegynder
13. oktober 2000 - 13:42 #23
Jeg skal faktisk bruge begge dele.

Men det ville være ret fedt hvis du kunne få lavet det script der.
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