Blog

No public Twitter messages.

Erstelle ein kategorisiertes Portfolio mit jQuery

Wenn du schon eine Weile in deinem Bereich arbeitest, wirst du warscheinlich ein ziemlich umfangreiches Portfolio besitzten. Um es ein wenig übersichtlicher zu gestalten, ist es sicherlich auch noch in einzelne Kategorien aufgeteilt. In diesem Tutorial werde ich das “Filtern der Kategorien” ein wenig interessanter machen mit ein klein wenig jQuery. Die Source Dateien zu diesem Tutorial findet ihr unter diesem Artikel zum kostenlosen Download.

Die Demo

Das Markup

Unser Portfolio ist nicht mehr, als eine simple unsortierte Liste.


Portfolio kategorisieren

In diesem Beispiel gehen wir davon aus, dass unser Portfolio vier Kategorien beinhaltet.

  • Design
  • Development
  • CMS
  • Integration
  • Information Architecture


Nun weisen wir dem Portfolio Elementen die class unserer jeweiligen Kategorie zu. Soll also Bild A in der Kategorie Development angezeigt werden, so weisen wir dem Listen Element von Bild A die class development zu. Achtet darauf, die class`s klein zu schreiben.


Die Kategorie Navigation

Da wir nun unsere Portfolio Einträge haben, benötigen wir natürlich noch die Navigation um diese zu sortieren. Wir erstellen also eine weitere unsortierte Liste.


Die CSS Datei

Da es in diesen Tutorial nicht um CSS geht, gehe ich diesen Teil schnell durch.

Zu allerst möchten wir die Kategorien horizontal sowie mit einem Rahmen betrachten.

ul#filter {
	float: left;
	font-size: 16px;
	list-style: none;
	margin-left: 0;
	width: 100%;
}
ul#filter li {
	border-right: 1px solid #dedede;
	float: left;
	line-height: 16px;
	margin-right: 10px;
	padding-right: 10px;
}

Als nächstes möchten wir bei dem letzten Listen Element den Rahmen entfernen ( Für die Browser die es unterstützen ) sowie die Link Farbe ändern.

ul#filter li:last-child { border-right: none; margin-right: 0; padding-right: 0; }
ul#filter a { color: #999; text-decoration: none; }

Außerdem möchten wir das Aussehen der aktuellen Kategorie verändern

ul#filter li.current a, ul#filter a:hover { text-decoration: underline; }
ul#filter li.current a { color: #333; font-weight: bold; }

Unsere Navigation wäre damit abgeschlossen. Setzen wir unseren Fokus nun auf das eigentliche Kategorie Layout. Wir möchten, dass immer drei Portfolio Elemente nebeneinand angezeigt werden. Außerdem soll jedes Portfolio Element einen Rahmen bekommen.

ul#portfolio {
	float: left;
	list-style: none;
	margin-left: 0;
	width: 672px;
}
ul#portfolio li {
	border: 1px solid #dedede;
	float: left;
	margin: 0 10px 10px 0;
	padding: 5px;
	width: 202px;
}

Zu guter letzt kommen noch einige Basis Eigenschaften für die Links und Bilder.

ul#portfolio a { display: block; width: 100%; }
ul#portfolio a:hover { text-decoration: none; }
ul#portfolio img { border: 1px solid #dedede; display: block; padding-bottom: 5px; }

Das geliebte jQuery

Ok, da wir nun unser Markup sowie unsere CSS Datei haben, kommen wir nun zum wichtigsten Teil dieses Tutorials: Dem Javascript
Wir starten mit dem einbinden der letzten jQuery Version in den Kopf Bereich unseres Dokumentes.

Als nächstes wollen wir unseren Code auszuführen, sobald das Dokument geladen ist.

$(document).ready(function() {
});

Wir möchten nichts tun, wenn keine Kategorie angeklickt ist. Außerdem wollen wir sicherstellen, dass wir nicht den Wert unseres href Links folgen. Wir benötigen also return false:

$('ul#filter a').click(function() {
	return false;
});

Sobald eine Kategorie geklickt ist, möchten wir ein paar Dinge machen: entferne die outline des geklickten Links, entferne die class des aktiven Listen Elements und füge die aktive class des geklickten Elternelements hinzu.

$(this).css('outline','none');
$('ul#filter .current').removeClass('current');
$(this).parent().addClass('current');

Als nächstes “nehmen” wir den text im geklickten Link, wandeln diesen in kleinbuchstaben um und ersetzen leerzeichen mit einem Bindestrich. ( Genau wie bei den Kategorien der Navigation )

var filterVal = $(this).text().toLowerCase().replace(' ','-');

Wenn der Navigations Link ALL geklickt ist, möchten wir alle Portfolio Elemente anzeigen sowie die class hidden entfernen.

if(filterVal == 'all') {
	$('ul#portfolio li.hidden').fadeIn('slow').removeClass('hidden');
}

Nun kommt der wichtige Teil des Scriptes. Wir gehen durch jedes Portfolio Element und überprüfen ob die class gleich ist mit der Kategorie, die geklickt wurde. Wenn es nicht die class hat, dann möchten wir das Element ausblenden und die class hidden hinzufügen. Wenn es die class besitzt, möchten wir das Element einblenden und die class hidden entfernen.

else {
	$('ul#portfolio li').each(function() {
		if(!$(this).hasClass(filterVal)) {
			$(this).fadeOut('normal').addClass('hidden');
		} else {
			$(this).fadeIn('slow').removeClass('hidden');
		}
	});
}

Das fertige Script.

Werfen wir einen Blick auf unser fertiges Script.

$(document).ready(function() {
	$('ul#filter a').click(function() {
		$(this).css('outline','none');
		$('ul#filter .current').removeClass('current');
		$(this).parent().addClass('current');
		var filterVal = $(this).text().toLowerCase().replace(' ','-');
		if(filterVal == 'all') {
			$('ul#portfolio li.hidden').fadeIn('slow').removeClass('hidden');
		} else {
			$('ul#portfolio li').each(function() {
				if(!$(this).hasClass(filterVal)) {
					$(this).fadeOut('normal').addClass('hidden');
				} else {
					$(this).fadeIn('slow').removeClass('hidden');
				}
			});
		}
		return false;
	});
});

Falls euch der Artikel gefallen hat, abonniert doch bitte unseren kostenlosen RSS Feed.



rss feed

Hat dir der Artikel gefallen? Dann abbonniere doch meinen kostenlosen RSS Feed.

Christopher Dosin - Hi, mein Name ist Christopher Dosin und ich komme aus Wuppertal nähe Düsseldorf. Seit meinem 14. Lebenjahr beschäftige ich mich mit dem Thema Internet und Webseiten. Meine erste Webseite war eine Beepworld Homepage. Derzeit bin ich selbstständig und habe meinen Fokus auf das Open Source CMS Joomla! gelegt.

9 Comments


  1. wesir (2 comments)
    Feb 13, 2025

    sehr nettes tut ^^

    biste ja wirklicj mal aktiver geworden kayyyy ^^


  2. Marcelo Dias (1 comments)
    Mrz 27, 2010

    Error IE6; IE7 e IE8.
    framework.js
    cod: 0 - line: 1 caracter: 1


  3. Milo (2 comments)
    Aug 24, 2024

    Kann man die aktiv gewählte Kategorie mit css auszeichnen?
    $(this).css(‘xy’,'xy’);

    Gruss milo


    • Milo (2 comments)
      Aug 24, 2024

      Sorry, bereits gelöst! : )


  4. friiitz (4 comments)
    Feb 18, 2025

    Ich habe schon einige Zeit am Code geschraubt, aber nicht hinbekommen, was ich gerne hätte. Wäre es auch möglich anstelle der Kategorie “All” eine Kategorie “New” einzustellen, die dann als Startseite angezeigt wird? Die einzelnen Listenelemente würden dann zum Beispiel die class “new” zusätzlich erhalten. Daneben sollte aber schon noch die Option “All” beibehalten werden.


    • Christopher Dosin (83 comments)
      Feb 18, 2025

      Ich verstehe nicht ganz, was du genau meinst.
      Eine neue Kategorie kannst du ja einfach hinzufügen, indem du dem Listenelement eine neue Class zuweist.


      • friiitz (4 comments)
        Feb 20, 2025

        Das habe ich schon versucht und es hat auch geklappt.
        Mein Problem ist, dass ich beim Aufrufen der Seite nur die Elemente anzeigen lassen möchte, die mit “new” gekennzeichnet sind. In der Standardprogrammierung erscheinen ja alle vorhandenden Listenelemente. Diese Funktion sollte aber nicht verloren gehen, sondern als weitere Option im Filtermenü erhalten bleiben.


  5. Florian (1 comments)
    Mrz 03, 2011

    Nice Work!
    -> einfach genial!


  6. christiane (1 comments)
    Mai 20, 2011

    Super ! Einfach perfekt..

Leave a Reply

*

Geld verdienen mit Links

teliad - Der Marktplatz für Textlinks Backlinkseller

Recent Tweets

    No public Twitter messages.