ugrás a tartalomhoz

div nyitás (mindig egy) javascipt-tel

jordapeti · 2009. Már. 26. (Cs), 00.06
Üdv mindenkinek!

Egy olyan progit szeretnék írni, ahol gombokkal tudok diveket nyitni, de ha már nyitva van egy divem a következő nyitásakor, akkor előbb a nyitva lévőt zárja be, majd nyitja a kívánt divet.

Többféleképpen is próbálkoztam már
- a divek állapotát lekérdeztem, majd a nyitottat zártam, de ez buggos volt. (csak azt nem csinálta amit kellett volna)
- most a nyitott divet tároltam változóban, és a következő nyitásnál ezt zártam. Ez egyes firefox verziókon már működik, másokon buggos, de ie-n halott.

forrás:

<html>
<head>

<style type="text/css">

#sz_1, #sz_2, #sz_3 {
	position:relative;
	left:100px;
	top:10px;
	width:200px;
	height:1px;
	border: 1px solid white;
	overflow:hidden;
	visibility:hidden;
	background: red;
}

</style>

<script type="text/javascript">
var i=1;
var timed;
var ne;
var nyitott;
var fel;
var speed;

function roll(nev)
{
	ne=nev;
	
	if (nyitott!=undefined)
	{
		speed="20";
		up(nyitott);
	}
	else
	{speed="4";}
	
	nyitott=nev;
	
	down();
}

function down()
{
	document.getElementById(ne).style.visibility="visible";
	
	if (i<250)
	{
		document.getElementById(ne).style.height=i;
		i=i+1;
	}
	else
	{
		clearTimeout(timed);
	}
	
	timed=setTimeout("down()",speed);
}

function up(fel)
{
	while (i>1)
	{
		i=i-10;
		document.getElementById(fel).style.height=i;		
	}
	
	document.getElementById(fel).style.visibility="hidden";
}



</script>

</head>
<body style="padding:0px; margin:0px;">
<img name="arrow" src="max.png" border="0" onClick="roll('sz_1')" />
<img name="arrow" src="max.png" border="0" onClick="roll('sz_2')" />
<img name="arrow" src="max.png" border="0" onClick="roll('sz_3')" />
		 
<div id="sz_1" align="center">szoveg1</div>
<div id="sz_2" align="center">szoveg2</div>
<div id="sz_3" align="center">szoveg3</div>

</body>
</html>
jorda.selfip.net/tmp/teszt/poz.htm

ebben a kódban nem értem hogy az első és a többi nyitás késleltetése között mért kellett különbséget tennem, hogy ugyan olyan legyen a tempó.

Ja és a zárás is jó lenne ha késleltetett lenne, de nekem abba mindig megakadt.

Előre is köszi mindenkinek a segítséget.

Üdv: Jordanoff Péter
 
1

segítség?

ironwill · 2009. Már. 26. (Cs), 00.37
Szia!

Először is én a helyedben egységesíteném a nyitó/záró függvény hívását.
(Mindenkettőt paraméterezve hívd, ne trüközz)

Amikor a "roll" függvény hívod, akkor az elejére beteszel egy ciklussal végig mész a div-eken és mindre meghívod a bezáró fggv-t. A nyitást meg már beletetted.

var divs = document.getElementsByTagName("div");
for (var i = 0; i<divs.length; i++) {
    if (divs[i].id.indexOf("sz_")) {
        up(divs[i]);
    }
}


Remélem tudtam segíteni.

üdv, Gábor
3

köszönöm

jordapeti · 2009. Már. 26. (Cs), 22.16
köszönöm szépen a segítséget, lehet hogy még ez lesz belőle!
2

Nekem is volt mar szuksegem

Blintux · 2009. Már. 26. (Cs), 09.41
Nekem is volt mar szuksegem ilyesmire, en a Mootools hasznalataval oldottam meg. Egyszeruen beillesztheto es meg latvanyos is.
Ime egy pelda arra ami neked kell:
http://demos.mootools.net/Accordion
4

köszönöm

jordapeti · 2009. Már. 26. (Cs), 22.20
Köszönöm szépen a linket, tetszik nekem is a megoldás!
De kérdésem lenne, hogy ha te is foglalkoztál vele, nincs-e meg a js file kibogozva?

Annyit nem értek még, hogy a divet amit nyitok, annak a magasságát hogy tudnám beállítani, és hogy overflow:hidden; legyen. A css-sel sokat nem értem el nála. Szerintem a js valahol definiálja, de sajna abban a dzsungelban nem találtam meg semmit.
5

Accordion

Poetro · 2009. Már. 27. (P), 01.01
Még egy Accordion megvalósítás, csak ez jQuery
6

ajánlom neked ezt az oldalt:

Tanul0 · 2009. Már. 27. (P), 11.36
ajánlom neked ezt az oldalt: http://dynamicdrive.com. Itt vannak hasonló scriptek ahhoz amit te szeretnél csinálni.