Projektgalerie in Anlehnung an die iTunes Musik Bibliothek

Projektgalerie in Anlehnung an die iTunes Musik Bibliothek Bild 1 Projektgalerie in Anlehnung an die iTunes Musik Bibliothek Bild 2 Projektgalerie in Anlehnung an die iTunes Musik Bibliothek Bild 3 Projektgalerie in Anlehnung an die iTunes Musik Bibliothek Bild 4 Projektgalerie in Anlehnung an die iTunes Musik Bibliothek Bild 5
HTML5 CSS3 jQuery Touch AJAX

Die Galerie orientiert sich in ihrer Funktionsweise an Apple's iTunes Musik Bibliothek. Sie dient allerdings nicht nur dem Zweck der Darstellung von Bildmaterial, sondern gibt darüber hinaus auch weiterführende Informationen. Somit kann diese Arbeit nicht nur als Bildergalerie genutzt werden, sondern auch als eine Art Projektgalerie, wie in diesem Fall mit einer Slideshow, Informationen zum Projekt und einem optionalen Link.

Die HTML-Datei besteht im großen und ganzen aus 2 Bereichen. Der erste Bereich ist ein Container mit den jeweiligen Vorschaubildern der einzelnen Projekte. Ein weiterer, nicht sichtbarer Container beinhaltet diverse canvas-Elemente für mit jQuery gezeichnete Piktogramme (schliessen, nächstes Bild, vorheriges Bild sowie ein canvas-Element als Markierung für das derzeit geöffnete Projekt) und ein p-Element zur Ausgabe der aktuellen Bildnummer der Slideshow. Der Container mit den unterschiedlichen Zahlenwerten dient lediglich zur Demonstration.

Die Galerie besitzt ein responsives Webdesign, weshalb bei Klick auf eines der Projekte zuerst mittels einer Funktion die Anzahl der Spalten ermittelt werden muss. Dies geschieht ganz einfach indem Breite des ersten Bildes und dessen Außenabstände, links und rechts, addiert und solange mit einer größer werdenden Zahl multipliziert werden, bis das Ergebnis größer als die Breite des Browserfensters ist.
Ergebnis = x * (Breite erstes Bild + Außenabstände (links & rechts) erstes Bild) //x = 0, 1, 2, 3, ...
Vergleich Breite des Browserfensters mit dem Ergebnis → Spaltenanzahl = x
Auf diesem Wege, kann zu jeder Browserbreite die maximale Spaltenanzahl berechnet werden.
Es wird weiterhin über jQuery der Container für die Projektdetails erstellt. Um den richtigen Einfügepunkt zu finden, kann nun über den Index des geklickten Bildes und die Spaltenanzahl das jeweilige Ende einer bestimmten Reihe ermittelt werden, um den Container einzufügen.
Sollte man vor einem Monitor sitzen und das Fenster selbstständig in der Größe ändern, muss auch auf die sich verändernde Spaltenanzahl bei geöffneten Details reagiert werden. Hierzu werden abermals der Index des geklickten Elements sowie die dabei kontinuierlich abgefragte Spaltenanzahl benötigt. Hinzu kommen der Einfügepunkt zum Zeitpunkt des Klicks und der neue Einfügepunkt zur aktuellen Spaltenanzahl. Die Differenz zwischen altem und neuem Einfügepunkt gibt hierbei die Anzahl der zu verschiebenden Bilder an, die entweder vor den geöffneten Container "projektDetails" oder dahinter springen. Dabei werden die Bilder in einer Varbiable zwischengespeichert, gelöscht und an der neuen Position eingefügt – es wird die Reihenfolge im DOM manipuliert.

Nachdem die Informationen über das Projekt mittles AJAX und der entsprechenden jQuery-Funktion load() geladen wurden, werden die zuvor erstellten canvas-Elemente und das p-Element dem unsichtbaren Container entnommen und in "projektDetails" eingefügt, um durch die besagte Slideshow zu navigieren oder aber den Container wieder zu schliessen. Danach öffnet sich der Container "projektDetails".
Schliessen erfolgt dabei über das "x" oder die umgebende, gräuliche Fläche. Wird eines der beiden Elemente geklickt, wird die Funktion slideToggle() erneut aufgerufen, der Container wird geschlossen, die Navigationselemente zurück in den unsichtbaren Container gelegt und "projektDetails" vollständig gelöscht.

Die Slideshow muss nicht zwingend über die Navaigationspfeile betätigt werden. Hierfür habe ich einfache Wischgesten implementiert. Eine vertikale Wischgeste hoch und runter kann somit verwendet werden. In diesem Beispiel wurden die Touchgesten auf die Maus gespiegelt, um dies auch am heimischen, nicht touch-fähigen Monitor auszuprobieren.

Mit Hilfe von CSS3 und den Media Queries wird dabei auf die sich ändernde Browserbreite reagiert, Elemente verschoben oder ihre Größe angepasst. Innerhalb des Stylesheets wird zwischen 4 Bereichen unterschieden.
@media screen and (min-width: 320px) and (max-width: 479px) → Smartphones - vertikal / Monitor
@media screen and (min-width: 480px) and (max-width: 767px) → Smartphones - horizontal / Monitor
@media screen and (min-width: 768px) and (max-width: 1023px) → Tablets - vertikal / Monitor
@media screen and (min-width: 1024px) → Tablets - horizontal / Monitor
Damit die Einstellungen auch auf mobilen Geräten übernommen werden, muss eine meta-Angabe bzgl. des Viewports gemacht werden.
<meta name="viewport" content="width=device-width, initial-scale=1.0 maximum-scale=10.0"> Durch width=device-width kann man dafür sorgen, dass Inhalt und Anzeigebereich übereinstimmen. Bei schmaleren Layouts wird dadurch z.B. kein unnötiger Platz verschenkt, sondern die Website in der möglichen Maximalgröße dargestellt. Über die Skalierungsangaben kann der Zoomfaktor angegeben werden. Will man den Zoom verhindern, kann entweder maximum-scale auf 1.0 gesetzt oder aber user-scalable=no für maximum-scale eingesetzt werden.

  Schau dir die Demonstration an