Avatar billede tybz Nybegynder
04. april 2004 - 08:23 Der er 18 kommentarer og
1 løsning

Åbne layers med scroll

Jeg har en side med en række layers der skal åbnes.

Selve siden ser sådan ud:
Lay1
Lay1_1
Lay2
Lay2_1
Lay3
Lay3_1
Lay4
Lay4_1

Disse layers (DIV tags) ser brugerne i starten:
Lay1
Lay2
Lay3
Lay4

Ved at trykke på Lay1 åbnes så det layer der er under Lay1 (Lay1_1) og Lay1 lukkes ned.

Så ser siden sådan ud.

Lay1_1
Lay2
Lay3
Lay4

Når man så trykker på Lay2 lukkes Lay1_1 igen og Lay1 kommer frem, samt Lay2 lukkes og Lay2_1 kommer frem. Så ser siden sådan ud:

Lay1
Lay2_1
Lay3
Lay4

Der skal laves med en scroll funktion så layerne åbnes/lukkes med en rulle effekt.

Nogen som har noget kode til dette som jeg måtte se.
Jeg er tæt på af have kodet løsningen selv men jeg opgav da der var en bug jeg ikke kunne finde.
Avatar billede roenving Novice
04. april 2004 - 08:26 #1
Hvad mener du med 'åbnes/lukkes med en rulle effekt' ...
Avatar billede tybz Nybegynder
04. april 2004 - 08:35 #2
Ved at læse højden på DIV tagsne og kalde en recursiv funktion der viser layeret i en ny højde - 10px med en setTimeout
Avatar billede roenving Novice
04. april 2004 - 08:42 #3
Er det sådan noget som:

http://www.dynamicdrive.com/dynamicindex1/davidmenu.htm

-- har ikke prøvet den, men jeg mener den også kan laves vertikalt !-)
Avatar billede tybz Nybegynder
04. april 2004 - 09:10 #4
Slet ikke :)
Det er jo bare en layers der følger siden.
Min er en side man klicker på og som åbner sig.
Avatar billede roenving Novice
04. april 2004 - 09:13 #5
Hvis du holder musen over slider den ind !-)
Avatar billede tybz Nybegynder
04. april 2004 - 09:27 #6
Jo men der er jo kun 1.
Det andet har jeg jo allerede.
Jeg skal have så DIV tagsne lukker hinanden ned.
Avatar billede roenving Novice
04. april 2004 - 11:12 #7
Så er det måske sådan noget, du skal bruge:

-- jeg har sat den til at folde sammen, så de, som har scripting fra også ser noget, der skal ikke ændres meget, hvis du vil have det sammenfoldet fra start ...

Til gengæld kræver det lige lidt mere, hvis du fortsat ønsker at udskifte !-)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Expanding/contracting menu</title>
<meta name="Generator" content="Stone's WebWriter 4">
<meta name="keywords" content="roenving,http://www.eksperten.dk/spm/485556">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
.menupunkt{font-family:tahoma,verdana,arial,sans-serif;cursor:pointer;color:#9d52be;background:#fff;font-weight:800;font-style:italics;font-size:10px;width:250px;}
.menu{position:relative;overflow:hidden;padding-left:5px;}
.menu a{text-decoration:none;}
.menu a:link{color:black;}
.menu a:visited{color:black;}
.menu a:hover{color:red}
.menu a:active{color:red}

</style>
<script language="javascript" type="text/javascript">
var speed = 50;//tid imellem ny højde;
var diff = 2;//antal pixels, som højde ændres med;
var state = new Array(),menus = new Array(),initiated=false,actMenus=0;
function showMenu(d){
  d = (showMenu.arguments.length==1)?document.getElementById(d.id.substring(1)):false;
  //if(initiated&&d&&state[d.id][2]==3)return;
  var num = d?state[d.id][0]:null;
  var newHeight;
  for(i=0;menus.length>i;i++){
    var actId = menus[i].id;
    switch(state[actId][2]){
      case 0:
        if(num===state[actId][0]){
          document.getElementById("o"+actId+'pic').src = "../img/minus.gif"
          state[actId][2] = 1;
          actMenus++;
          newHeight = state[actId][3] + diff;
          if(newHeight>=state[actId][1]){
            state[actId][3] = state[actId][1];
            state[actId][2] = 3;
            actMenus--;
          }else
            state[actId][3] = newHeight;
        }
        break;
      case 1:
        newHeight = state[actId][3] + diff;
        if(newHeight>=state[actId][1]){
          state[actId][3] = state[actId][1];
          state[actId][2] = 3;
          actMenus--;
        }else
          state[actId][3] = newHeight;
        break;
      case 2:
        newHeight = state[actId][3] - diff;
        if(0>=newHeight){
          state[actId][3] = 0;
          state[actId][2] = 0;
          actMenus--;
        }else
          state[actId][3] = newHeight;
        break;
      case 3:
        //if(num!=state[actId][0]){
          document.getElementById("o"+actId+'pic').src = "../img/plus.gif"
          state[actId][2] = 2;
          actMenus++;
          newHeight = state[actId][3] - diff;
          if(0>=newHeight){
            state[actId][3] = 0;
            state[actId][2] = 0;
            actMenus--;
          }else
            state[actId][3] = newHeight;
        //}
    }
    //alert(menus[i].id+"\n"+state[actId][3]);
    menus[i].style.height = state[actId][3] + 'px';   
  }
  //alert(actMenus);
  initiated = true;
  if(actMenus>0)setTimeout('showMenu()',speed);
}
function init(){
  var divs = document.getElementsByTagName('DIV');
  for(i=0;divs.length>i;i++){
    if(divs[i].id.match(/^menu/)){
      id = divs[i].id;
      menus[menus.length] = divs[i];
      state[id] = new Array();
      state[id][0] = menus.length-1;
      state[id][1] = divs[i].offsetHeight;
      state[id][2] = 3;
      state[id][3] = state[id][1];
      //alert(state[id][3]);
    }
  }
  showMenu();
}
</script>
</head>
<body onload="init();">
<div id="omenu1" class="menupunkt" onclick="showMenu(this);">
<img id="omenu1pic" src="plus.gif" height="10" width="10" alt="Fold ud/ind">
Punkt 1
  <div id="menu1" class="menu" onclick="event.cancelBubble=true">
    <a href="#" onclick="return false;">Underpunkt 1</a><br>
    <a href="#" onclick="return false;">Underpunkt 2</a><br>
    <a href="#" onclick="return false;">Underpunkt 3</a><br>
    <a href="#" onclick="return false;">Underpunkt 4</a>
  </div>
</div>
<div id="omenu2" class="menupunkt" onclick="showMenu(this);">
<img id="omenu2pic" src="../img/plus.gif" height="10" width="10" alt="Fold ud/ind">
Punkt 2
  <div id="menu2" class="menu" onclick="event.cancelBubble=true">
    <a href="#" onclick="return false;">Underpunkt 1</a><br>
    <a href="#" onclick="return false;">Underpunkt 2</a><br>
    <a href="#" onclick="return false;">Underpunkt 3</a><br>
    <a href="#" onclick="return false;">Underpunkt 4</a>
  </div>
</div>
<div id="omenu3" class="menupunkt" onclick="showMenu(this);">
<img id="omenu3pic" src="../img/plus.gif" height="10" width="10" alt="Fold ud/ind">
Punkt 3
  <div id="menu3" class="menu" onclick="event.cancelBubble=true">
    <a href="#" onclick="return false;">Underpunkt 1</a><br>
    <a href="#" onclick="return false;">Underpunkt 2</a><br>
    <a href="#" onclick="return false;">Underpunkt 3</a><br>
    <a href="#" onclick="return false;">Underpunkt 4</a>
  </div>
</div>
<div id="omenu4" class="menupunkt" onclick="showMenu(this);">
<img id="omenu4pic" src="../img/plus.gif" height="10" width="10" alt="Fold ud/ind">
Punkt 4
  <div id="menu4" class="menu" onclick="event.cancelBubble=true">
    <a href="#" onclick="return false;">Underpunkt 1</a><br>
    <a href="#" onclick="return false;">Underpunkt 2</a><br>
    <a href="#" onclick="return false;">Underpunkt 3</a><br>
    <a href="#" onclick="return false;">Underpunkt 4</a>
  </div>
</div>
<div id="omenu5" class="menupunkt" onclick="showMenu(this);">
<img id="omenu5pic" src="../img/plus.gif" height="10" width="10" alt="Fold ud/ind">
Punkt 5
  <div id="menu5" class="menu" onclick="event.cancelBubble=true">
    <a href="#" onclick="return false;">Underpunkt 1</a><br>
    <a href="#" onclick="return false;">Underpunkt 2</a><br>
    <a href="#" onclick="return false;">Underpunkt 3</a><br>
    <a href="#" onclick="return false;">Underpunkt 4</a>
  </div>
</div>
</body>
</html>
Avatar billede tybz Nybegynder
04. april 2004 - 12:28 #8
Perfekt...lav det som svar så får du de 200 point
Avatar billede roenving Novice
04. april 2004 - 12:32 #9
Velbekomme '-)
Avatar billede roenving Novice
04. april 2004 - 12:51 #10
Hmmm ...

Jeg opdagede lige et problem, når der var forskel i menuernes længde, så sådan i stedet:

<script language="javascript" type="text/javascript">
var speed = 50;//tid imellem ny højde;
var diff = 2;//antal pixels, som højde ændres med;
var state = new Array(),menus = new Array(),initiated=false,actMenus=0,actM=null;
function showMenu(d){
  d = (showMenu.arguments.length==1)?document.getElementById(d.id.substring(1)):false;
  //if(initiated&&d&&state[d.id][2]==3)return;// <-- denne linje skal aktiveres, hvis man ikke skal kunne lukke åbne menuer !-)
  var num = d?state[d.id][0]:null;
  actM = d?num:actM;
  var newHeight;
  for(i=0;menus.length>i;i++){
    var actId = menus[i].id;
    switch(state[actId][2]){
      case 0:
        if(num===state[actId][0]){
          document.getElementById("o"+actId+'pic').src = "../img/minus.gif"
          state[actId][2] = 1;
          actMenus++;
          newHeight = state[actId][3] + diff;
          if(newHeight>=state[actId][1]){
            state[actId][3] = state[actId][1];
            state[actId][2] = 3;
            actMenus--;
          }else
            state[actId][3] = newHeight;
        }
        break;
      case 1:
        newHeight = state[actId][3] + diff;
        if(newHeight>=state[actId][1]){
          state[actId][3] = state[actId][1];
          state[actId][2] = 3;
          actMenus--;
        }else
          state[actId][3] = newHeight;
        break;
      case 2:
        newHeight = state[actId][3] - diff;
        if(0>=newHeight){
          state[actId][3] = 0;
          state[actId][2] = 0;
          actMenus--;
        }else
          state[actId][3] = newHeight;
        break;
      case 3:
        if(actM!=state[actId][0]||d){
          document.getElementById("o"+actId+'pic').src = "../img/plus.gif"
          state[actId][2] = 2;
          actMenus++;
          newHeight = state[actId][3] - diff;
          if(0>=newHeight){
            state[actId][3] = 0;
            state[actId][2] = 0;
            actMenus--;
          }else
            state[actId][3] = newHeight;
        }
    }
    menus[i].style.height = state[actId][3] + 'px';   
  }
  initiated = true;
  if(actMenus>0)setTimeout('showMenu()',speed);
  else actM = null;
}
function init(){
  var divs = document.getElementsByTagName('DIV');
  for(i=0;divs.length>i;i++){
    if(divs[i].id.match(/^menu/)){
      id = divs[i].id;
      menus[menus.length] = divs[i];
      state[id] = new Array();
      state[id][0] = menus.length-1;
      state[id][1] = divs[i].offsetHeight;
      state[id][2] = 3;
      state[id][3] = 0;
      //divs[i].style.height = '0px';
    }
  }
  showMenu();
}
</script>
Avatar billede roenving Novice
02. april 2007 - 20:52 #11
-- og den kan vel snart lukkes ?-)
Avatar billede tybz Nybegynder
10. april 2007 - 08:07 #12
DOH den har godt nok ligget her længe. Sorry det havde jeg ikke set.
Avatar billede roenving Novice
10. april 2007 - 10:29 #13
-- og tak for point ;~}
Avatar billede andrew Nybegynder
05. august 2008 - 17:40 #14
roenving-> Kan koden ændres så den ikke "folder sig ud" når siden indlæses?
Avatar billede roenving Novice
06. august 2008 - 16:05 #15
Hvad mener du ?-)
Avatar billede andrew Nybegynder
07. august 2008 - 16:45 #16
Hej.

Efter jeg har afprøvet den omdiskuterede kode, bliver menuen åbnet og lukket ved indlæsning. Gør den ikke det hos dig?
Avatar billede roenving Novice
09. august 2008 - 12:24 #17
Den første, jo ...
Avatar billede roenving Novice
09. august 2008 - 12:24 #18
Den første version, jo ...
Avatar billede andrew Nybegynder
09. august 2008 - 16:17 #19
Okay. Når jeg bruger den sidste af koderne du skrev, åbner menuen sig ved indlæsning og lukker igen. Alt sammen i løbet af 1 sekundt.. Meget mystisk.
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