
Einer unserer E-Commerce-Kunden hatte eine Reihe von Produkten, die wir online bewerben wollten. Jedes Produkt hatte einen anderen „Grund“, warum es im Angebot war. Vielleicht wurde es eingestellt, vielleicht gab es Sonderpreise, vielleicht gab es kostenlosen Versand. Ursprünglich wollten sie eine spezielle Seite für eine neue Art von Rabatt erstellen: „Rollback Pricing“. Wir argumentierten, dass ein Besucher im Web im Allgemeinen nicht wirklich darum kümmert, warum ein Produkt im Angebot ist, sondern nur, dass es das ist, und dass es von Nachteil sein könnte, die Angebotsseite in verschiedene Seiten aufzuteilen.
Stattdessen haben wir uns darauf geeinigt, die Angebotsseite als eine einzige Seite zu belassen, aber die Produkte darin entweder alle auf einmal oder gefiltert nach der Art des Angebots anzuzeigen. Ein wenig jQuery ist immer für die Aufgabe da!
Demo anzeigen Dateien herunterladen
Der Markup
Jeder Block hat eine umgebende Div. Sie hat eine Klasse, die sie mit allen anderen Blöcken für die gemeinsame Formatierung teilt, und eine Klasse, die einzigartig für ihren „Typ“ ist. Divs haben keine href-Elemente, aber sie können rel-Attribute haben, die ich verwendet habe, um eine URL zu speichern. In der Demo ist die Klickbarkeit von Divs nicht implementiert, aber der Code ist im JavaScript auskommentiert, sodass Sie dort sehen können, wie das funktioniert.
<div class="discounted-item reduced" rel="/store/catalog/Dryline_Markers-47-1.html">
<img src="images/discountthumb-streamliner.jpg" alt="streamliner" />
<div class="reasonbar">
<div class="prod-title">Streamliner Field Chalkers</div>
<div class="reason">Rollback Pricing</div>
</div>
<div class="discount-bar">
Price lower than catalog. Save $30!
</div>
</div>
Das „Filter“-Menü besteht nur aus einer Reihe von Links. Jeder Link hat eine ID, die mit der Klasse des Typs übereinstimmt, nach dem er filtern soll.
<p id="catpicker">
<a href="#" id="allcat" class="current">VIEW ALL</a> |
<a href="#" id="reduced" class="filter">Rollback Pricing</a> |
<a href="#" id="freeshipping" class="filter">Free Shipping</a> |
<a href="#" id="discontinued" class="filter">Closeout</a> |
<a href="#" id="webonly" class="filter">Web Only</a>
</p>
Das CSS
Es gibt nichts allzu Kompliziertes in der CSS, aber ich füge sie hier zur Sicherheit ein.
* { margin: 0; padding: 0; }
html { overflow-y: scroll; }
body { font: 12px Georgia; }
#page-wrap { width: 690px; margin: 20px auto; }
h1 { font: 30px Georgia; margin: 0 0 10px 0; }
.discounted-item { width: 100%; margin: 0 0 10px 0; position: relative; cursor: pointer;
height: 79px; }
.discount-bar { padding: 10px 0 10px 150px; font: italic 18px Georgia, Serif; }
.reasonbar { padding: 4px 0 4px 150px; overflow: hidden;
width: 540px; color: white; }
.prod-title { width: 49%; float: left; font: bold 17px Helvetica, Sans-Serif; }
.reason { width: 49%; float: right; text-align: right; text-transform: uppercase;
letter-spacing: 2px; padding: 0 5px 0 0; }
.discounted-item img { position: absolute; top: 0; left: 0; }
.reduced { border: 2px solid #A34427; }
.reduced .reasonbar { background: #A34427; }
.reduced .discount-bar { color: #A34427; background: white; }
Zufällige Dinge von Interesse
- Da die Höhe der Seite wächst und schrumpft, ist es am besten, eine vertikale Scrollleiste zu erzwingen, um Sprünge bei der horizontalen Zentrierung zu vermeiden.
- Das Bild wurde mit absoluter Positionierung platziert. Einfache und stabile Layouttechnik dafür, ohne Floats.
- Divs haben einen Zeigercursor, da sie in einer Live-Umgebung klickbar wären.
Das jQuery JavaScript
Es wurde eine kleine Opazitäts-Rollover-Aktion hinzugefügt. (Auch dies ist der Bereich, in dem Sie die Divs klickbar machen könnten, siehe das tatsächliche JS im Beispiel).
$(".discounted-item")
.css("opacity","0.8")
.hover(function(){
$(this).css("opacity","1");
}, function() {
$(this).css("opacity","0.8");
});
Und um das Filtern zu ermöglichen
$("#allcat").click(function(){
$(".discounted-item").slideDown();
$("#catpicker a").removeClass("current");
$(this).addClass("current");
return false;
});
$(".filter").click(function(){
var thisFilter = $(this).attr("id");
$(".discounted-item").slideUp();
$("."+ thisFilter).slideDown();
$("#catpicker a").removeClass("current");
$(this).addClass("current");
return false;
});
Etwas anderer Code für den „Alle anzeigen“-Button, da er nur alles anzeigen muss.
In der Live-Demo gibt es auch etwas „Mischen“ (shuffling), sodass die Reihenfolge der Angebote bei jedem Laden der Seite zufällig ist, dank James Padolseys DOM Shuffler.
Ähnliches Tutorial
Trevor Davis hat vor einiger Zeit ein sehr ähnliches Demo auf NETTUTS gemacht.
Wenn Sie es nicht zufällig sortiert, sondern alphabetisch geordnet haben möchten, wie erreichen Sie das in jQuery? Es ist ein sehr schöner Touch, sie wie Karten anzuordnen.
Es ist in der Datei filter.js. Löschen Sie die erste Zeile bis zu })(jQuery);. Dann unten etwa bei Zeile 60 $(“.discounted-item”).shuffle();. Nach meiner Zählung sind das die Zeilen 1-24 und dann Zeile 60.
Das ist ziemlich süß, ich wünschte, ich könnte jQuery.
Danke für diesen kleinen Block, er funktioniert ziemlich gut. Ich habe nur eine Frage und bin mir nicht sicher, ob das nicht außerhalb des Rahmens dieses Artikels liegt. Ich habe versucht, so etwas in WordPress zu integrieren. Ich habe ein zusätzliches Plugin verwendet, um unendliches Scrollen (auch der Name des Plugins) von Inhalten zu erstellen, so dass, wenn der Benutzer das Ende erreicht, weitere Inhalte geladen werden. Ich würde es auf eine sehr ähnliche Weise wie Ihr Beispiel verwenden. Das Problem ist, wenn es mehr holt, kommt es nicht gefiltert an, es hat nur die Inhalte der nächsten Seite. Gibt es eine jQuery-Funktion (ich bin generell schlecht mit Programmieren) oder etwas, das ich an die neuen Ergebnisse weitergeben kann, ohne dass die Person erneut auf die Filterwahl klicken muss. Danke.
Das ist fantastisch. Danke fürs Teilen!
Interessant, hat einige Möglichkeiten für zukünftige Projekte.
Wisst ihr Jungs. Ich könnte mir vorstellen, dass dies ein großartiges Plugin für WordPress wäre, um Kategorien zu sortieren! Aber ich kann kein PHP, also fragt mich nicht lol.
Ziemlich cool Chris. Ich denke, meine einzige Beschwerde ist, dass es nicht gut abwärtskompatibel ist. Deaktivieren Sie JavaScript und keiner der Navigationslinks verlinkt irgendwohin. Ich würde empfehlen, sie mit JavaScript anzuhängen und standardmäßig alle anzuzeigen.
Ja, Sie haben absolut Recht, in der Produktion sollten die Filterlinks mit JavaScript angehängt werden.
Cool, könnten Sie bitte eine Anleitung dazu posten? Danke!
Cool! Ich wünschte, ich könnte jQuery… ähm… ich hoffe, Sie könnten ein Tutorial über jQuery schreiben? Ich meine, ich habe Ihr Video-Tutorial über jQuery gesehen und es hat mir wirklich gefallen und es ist ziemlich cool. Es scheint einfach zu sein… aber könnten Sie einfach mehr Tutorials über jQuery machen. Vielen Dank… das ist großartig!
Das ist super! Danke, Chris.
Hallo Chris aus GRIECHENLAND
Danke für deine Tutorials.
Ich versuche, die Filterbaren Blöcke offline zu testen, aber das Filtern funktioniert nicht????
Bitte informieren Sie mich, was ich falsch mache ???
Vielen Dank
fanis
Gibt es eine Möglichkeit, die Liste beim Laden zu filtern? Anstatt standardmäßig alle Einträge anzuzeigen? Danke und tolles Skript…
Sie können ausblenden, was Sie nicht anzeigen möchten, indem Sie auf dieses Div-Element „display: none“ anwenden. Allerdings ist „Alle anzeigen“ immer noch auf „current“ eingestellt, anstatt auf das Div-Element, das Sie beim Laden anzeigen möchten. Wenn Sie die ID des Divs „Alle anzeigen“ von „current“ in „filter“ ändern, funktioniert es nicht mehr…
Weiß jemand das?
Das ist ein großartiges Tutorial – ich werde dieses ausprobieren.
Wie würde ich das mit MySQL verwenden?
Ich habe eine while-Schleife, die eine Liste von Fußballspielen ausgibt, und möchte den Filter verwenden, um durch Wettbewerbe, Jahre und Saisons usw. zu sortieren.
Wo würde ich anfangen?