Auf- & zuklappende Div's mit Prototype
Anzeige Hier werben
Hier erkläre ich, wie Ihr mit Prototype ganz einfach eine Liste mit verschiedenen Textblöcken auf- und zuklappen könnt.
Als erstes brauchen wir die neueste Version vom Prototype Framework. http://prototypejs.org/download
Diese Datei bindet Ihr in euere Seite im <head> Bereich ein:
Z.B.:
1 | <script type="text/javascript" src="prototype.js"></script>
|
Als nächstes Brauchen wir unsere Container die wir später auf- und zuklappen lassen.
1 2 3 4 5 6 7 8 9 10 11 12 13 | <div class="mainContainer opened">
<div class="buttonContainer"> <span class="toggle-button">toggle</span> </div>
<div class="toggle-target">
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.
</div>
<div class="buttonContainer"> <span class="toggle-button">toggle</span> </div>
<div class="toggle-target">
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.
</div>
</div>
|
Hier noch ein wenig CSS, damit das ganze auch schön aussieht:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <style type="text/css">
body {
font-family: verdana;
}
div.mainContainer {
width:800px;
margin:0 auto; /* Zentrierung im Firefox */
text-align:center; /* damit es im IE auch Zentriert ist */
}
div.mainContainer div.buttonContainer {
width:100%;
border:1px solid silver;
background:silver;
margin:10px 0px 0px 0px;
}
div.mainContainer div.buttonContainer span.toggle-button {
display: block;
width:80px;
border:1px solid black;
margin:4px;
text-align:center;
cursor:pointer;
}
div.mainContainer div.toggle-target {
text-align: left;
padding:10px;
border-left:1px solid silver;
border-right:1px solid silver;
border-bottom:1px solid silver;
}
</style>
|
Als nächstes machen wir unter der eingebundenen Prototype Datei einen Javascript Block auf.
Wir definieren als erstes, wann das ganze Skript ausgeführt werden soll:
1 2 3 | document.observe('dom:loaded', function () {
});
|
Hiermit sagen wir dem Javascript, das der Inhalte erst ausgeführt soll wenn, der Content geladen wurde. Das gild nicht für Bilder!!
Als nächstes definieren wir die Variablen die wir später brauchen:
1 2 3 | /* Deklaration der Variablen */
var arrToggelButton = $$('.toggle-button');
var arrToggleTarget = $$('.toggle-target');
|
Die $$ Methode kann belibig viele CSS-Selektoren beinhalten und liefert als Resultat ein Array zurück.
z.B. $$('div.box').first(); Result = Das erst div Element mit der Klasse box welches im DOM gefunden wurde
$$('div.box'); Result = Array mit allen div Elementen mit der Klasse box die im DOM gefunden werden konnten.
1
2
3
4
5 | arrToggelButton.each(function (elButton, intIdx) {
elButton.observe('click', function () {
arrToggleTarget[intIdx].toggle();
});
});
|
Wir benutzen nun das Array arrToggleButton, welches nun 2 Elemente beinhaltet und iterieren darüber. Jedes Element wird nun in der Variabel elButton gespeichert. Nun observen/überwachen wir das Event 'click' auf dem Element elButton. Zuvor haben wir noch einen Zähler definiert, intIdx. Diesen benutzen wir nun, um dass zu dem Button gehörige Container (toggle-target) zu identifizieren. Fertig! Nun könnt Ihr die Container auf und zu klappen.
Hier noch einmal alles komplett.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<script type="text/javascript" src="http://prototypejs.org/assets/2008/1/25/prototype-1.6.0.2.js"></script>
<title>Tutorial</title>
<script type="text/javascript">
document.observe('dom:loaded', function () {
/* Deklaration der Variablen */
var elMainContainer = $$('.mainContainer').first();
var arrToggelButton = $$('.toggle-button');
var arrToggleTarget = $$('.toggle-target');
arrToggelButton.each(function (elButton, intIdx) {
elButton.observe('click', function () {
arrToggleTarget[intIdx].toggle();
});
});
});
</script>
<style type="text/css">
body {
font-family: verdana;
}
div.mainContainer {
width:800px;
margin:0 auto; /* Zentrierung im Firefox */
text-align:center; /* damit es im IE auch Zentriert ist */
}
div.mainContainer div.buttonContainer {
width:100%;
border:1px solid silver;
background:silver;
margin:10px 0px 0px 0px;
}
div.mainContainer div.buttonContainer span.toggle-button {
display: block;
width:80px;
border:1px solid black;
margin:4px;
text-align:center;
cursor:pointer;
}
div.mainContainer div.toggle-target {
text-align: left;
padding:10px;
border-left:1px solid silver;
border-right:1px solid silver;
border-bottom:1px solid silver;
}
</style>
</head>
<body>
<div class="mainContainer opened">
<div class="buttonContainer"> <span class="toggle-button">toggle</span> </div>
<div class="toggle-target">
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.
</div>
<div class="buttonContainer"> <span class="toggle-button">toggle</span> </div>
<div class="toggle-target">
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.
</div>
</div>
</body>
</html>
|


Gutes Script
aber was muß ich ändern, wenn ich in der Grundstellung die Container geschlossen haben möchte.
Vielen Dank im Voraus!
Re: Gutes Script
ist doch ganz einfach =)
document.observe('dom:loaded', function () {
/* Deklaration der Variablen */
var elMainContainer = $$('.mainContainer').first();
var arrToggelButton = $$('.toggle-button');
var arrToggleTarget = $$('.toggle-target');
arrToggelButton.each(function (elButton, intIdx) {
arrToggleTarget[intIdx].toggle();
});
arrToggelButton.each(function (elButton, intIdx) {
elButton.observe('click', function () {
arrToggleTarget[intIdx].toggle();
});
});
});
ganz anders gelöst..
Hi,
ich kenne Prototype oder Mootools nicht und habe das so gelöst:
<!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>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Auf- und Zuklappen</title>
</head>
<body>
<script type="text/javascript">function show(info) { if (document.getElementById(info).style.display=='none') { document.getElementById(info).style.display='block'; } else { document.getElementById(info).style.display='none'; }}function hide(info) { if (document.getElementById(info).style.display=='block') { document.getElementById(info).style.display='none'; } else { document.getElementById(info).style.display='block'; }}</script>
<h1><a href="#" onClick=" show('1');return false">Überschrift des Divs</a></h1><div id="1" onclick="hide(1);return false" style="display:none; border:1px solid #e54e16; padding:0px 10px 10px 10px;"><p>Inhalt des Divs. Schliessen funktioniert auch, wenn man in das Div klickt. Woran ich noch bastele, ist eine Funktion, die ein offenes Div schliesst, wenn ein anderes geöffnet wird.</p></div>
</body>
</html>
Re: ganz anders gelöst..
Das ist ja gut, aber was ist wenn du mehrere Boxen hast die du Auf und zu klappen willst? In deinem Fall müstest du immer neue Id's sprich Boxen und a Tags anlegen und hast viel mehr Quellcode zu überprüfen... In dem Oben erklärten Beispiel ist auch zusätzlich noch der JS Quellcode vom HTML Code getrennt, was zur Übersicht beiträgt!
Beschäftige dich mit Prototype oder Mootools und du wirst sehen das es ganz viele Vorteile mitsichbringt eines der beiden Frameworks zu benutzen.
Mootools?
Schonmal was vom Mootools Framework gehört? Nicht unbedingt auf dieses Beispiel bezogen aber allgemein ist es mein Empfinden, dass diese Javascript Bibliothek etwas ausgereiftere Funktionen hat... und sehr schön kompakt ist. Kann ich ja auch mal einen Artikel beitragen :)
Re: Mootools?
Ja mootools ist auch nett, leider wurde ich quasi dazu genötigt "prototype" zu benutzen, das es hier in der Firma pflicht ist ;)
Aber mach mal nen Artikel gucke mir den sicher mal an ;)
Beispiel funktionslos?
Moin,
geht nur bei mir das Beispiel nicht (im aktuellen FF und Opera) oder ist das ein allgemeines Problem?
Re: Beispiel funktionslos?
Das Beispiel war gar nicht freigeschaltet. Da Prototype extern eingebunden wird, hab ich's auch erst mal deaktiviert - da müssen wir noch eine Lösung für finden. Sobald die da ist, wird's wieder aktiviert.
Re: Beispiel funktionslos?
Liegt wohl eher daran das dann die Prototype Datei nicht included ist! prototype ist eine eigene browserweiche und geht in allen gängigen Browsern