Avatar billede mik789 Nybegynder
03. juni 2002 - 18:18 Der er 8 kommentarer og
1 løsning

vise / skjule lag II

Her er et script der kan vise eller skjule lag. Det fungerer selv med flere forskellige serier af lag (hvor hver serie har forskellig absolut position), med det første lag i hver serie sat til visible ved load af siden og alle lag i serien med stigende z-index. Der er også taget højde for at funktionen kaldes både fra index siden og fra dennes iframe. Men scriptet forudsætter at alle lagenes ID indgår som argumenter i kaldet af funktionen sammen med enten 'show' eller 'hide' (for hhv visible og hidden). Hvis man har 50 lag i en serie giver det nogle ret besværlige kald. Kan nogle her finde på et script der udretter det samme, men kan nøjes med bare ID for det lag der skal vises som argument (eller kun ganske få flere argumenter i hvert kald)???? Her er scriptet som det er nu:

<script type="text/javascript">
function findObj(theObj, theDoc) {
  var p, i, foundObj;
 
  if(!theDoc) theDoc = document;
  if(!foundObj && document.getElementById && self!=parent) foundObj = parent.document.getElementById(theObj); // Hvis DOM browser med frames (iframe her)
  if(!foundObj && document.getElementById && self==parent) foundObj = document.getElementById(theObj); // Hvis DOM browser uden frames
   
  return foundObj;
}

function showHideLayers() {
  var i, visStr, obj, args = showHideLayers.arguments; // args er argumenterne i funktionskaldet
  for (i=0; i<(args.length-1); i+=2) { // Tælleren tæller op til 1 før det sidste argument, dvs. op til det sidste objID og tester undervejs argument 1 fra objID'et i hvert par (dvs. enten om der står 'show' eller 'hide').
    if ((obj = findObj(args[i])) != null) { // Forudsat at findObj() ikke returnerer null på argumenterne i kaldet af showHideLayers()
      visStr = args[i+1]; // - og at visStr er det 2. argument i hvert par (dvs. 'show' eller 'hide')
      if (obj.style) { // - og hvis style objektet er understøttet
        obj = obj.style;
        if(visStr == 'show') visStr = 'visible'; // - så skal 'show' sættes = 'visible'
        else if(visStr == 'hide') visStr = 'hidden'; // og 'hide' = 'hidden'
      }
      obj.visibility = visStr; // Og det hele sammensættes til sidst til (evt. parent.)document.getElementById(objID).style.visibility = visible/hidden
    }
  }
}
</script>

Kaldet foregår så f.eks.:

<a href="page.html#afsnit1" onclick="showHideLayers('sekRef01','show','sekRef00','hide','sekRef02','hide','sekRef03','hide');">Gå til afsn.1</a>
<a href="page.html#afsnit2" onclick="showHideLayers('sekRef02','show','sekRef00','hide','sekRef01','hide','sekRef03','hide');">Gå til afsn.2</a>
<a href="page.html#afsnit3" onclick="showHideLayers('sekRef03','show','sekRef00','hide','sekRef01','hide','sekRef02','hide');">Gå til afsn.3</a>

-men med 50 afsnit bliver det lisom lidt besværligt

/mik
Avatar billede mik789 Nybegynder
03. juni 2002 - 18:25 #1
det skal tilføjes at scriptet skal kunne opdatere flere serier af lag på én gang, f.eks. ved at showHideLayers() kaldes to gange ved samme onclick
Avatar billede mik789 Nybegynder
03. juni 2002 - 18:29 #2
og så lige en rettelse til analysen af første funktion. Ikke: "Hvis DOM browser med frames (iframe her)", men: "Hvis DOM browser og hvis dokumentet er i en frame (eller iframe)" og tilsvarende for næste linje
Avatar billede kolzie Nybegynder
03. juni 2002 - 19:01 #3
er ikke heeeelt med på hvad du mener - om det blot skal forkortes el. om den du har ikke fungerer ordenligt, sådan som jeg lige kan se det kan forkortes mest muligt er..
<a href="page.html#afsnit1" onMouseOver="showLayer('divEt');" onMouseOut="hideLayer('divEt');> - hvis det er noget alá det du er ude efter, kan jeg da godt give dig hele koden - men jeg tvivler..
Avatar billede mik789 Nybegynder
03. juni 2002 - 19:27 #4
kolzie> koden som jeg har (og som jeg har givet i sp.) fungerer fint. Den kan netop skifte mellem serier af lag flere steder på siden. Det fungerer også frem og tilbage på kryds og tværs, dvs. man kan gå fra lag 27 til lag 3 eller hvad som helst i serien. Det er kun de mange argumenter i kaldet der er besværligt. Sp er om kan kan forenkle kaldet men bevare scriptets egentskaber. Det SKAL være en onclick der kalder funktionen.
Avatar billede Slettet bruger
03. juni 2002 - 20:33 #5
Er det noget med, at når du gør et lag synligt, så skal alle andre være usynlige?
For så er det bare at lægge dem ind i et array og skjule dem alle sammen i en løkke!
Avatar billede mik789 Nybegynder
03. juni 2002 - 21:41 #6
phoenixy> ja, i hver serie er der selvfølgelig kun ét lag synligt ad gangen. hvordan skulle den løgge se ud?
Avatar billede mik789 Nybegynder
03. juni 2002 - 22:31 #7
løkke
Avatar billede mik789 Nybegynder
04. juni 2002 - 08:22 #8
hmmn, ingen melder sig. Er det fordi der ikke er nogen løsninger eller fordi der skal flere point på bordet. Prøver med det sidste.
Avatar billede mik789 Nybegynder
04. juni 2002 - 14:39 #9
lukker. er selv på vej med en løsning, men skal have hjælp til det sidste
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