Heim >Web-Frontend >CSS-Tutorial >Erstellen einer Filterkomponente mit CSS -Animationen & JQuery
Vor einigen Monaten schrieb ich einen Artikel über Mixitup, ein beliebtes Jquery -Plugin zum Filtern und Sortieren. In dem heutigen Artikel zeige ich Ihnen, wie Sie Ihre eigene einfache filterbare Komponente mit JQuery- und CSS -Animationen erstellen.
ohne weiteres, fangen wir an!
Als erster Schritt zeige ich Ihnen die HTML -Struktur der Komponente. Betrachten Sie das folgende Markup:
<span><span><span><div</span> class<span>="cta filter"</span>></span> </span> <span><span><span><a</span> class<span>="all active"</span> data-filter<span>="all"</span> href<span>="#"</span> role<span>="button"</span>></span>Show All<span><span></a</span>></span> </span> <span><span><span><a</span> class<span>="green"</span> data-filter<span>="green"</span> href<span>="#"</span> role<span>="button"</span>></span>Show Green Boxes<span><span></a</span>></span> </span> <span><span><span><a</span> class<span>="blue"</span> data-filter<span>="blue"</span> href<span>="#"</span> role<span>="button"</span>></span>Show Blue Boxes<span><span></a</span>></span> </span> <span><span><span><a</span> class<span>="red"</span> data-filter<span>="red"</span> href<span>="#"</span> role<span>="button"</span>></span>Show Red Boxes<span><span></a</span>></span> </span><span><span><span></div</span>></span> </span> <span><span><span><div</span> class<span>="boxes"</span>></span> </span> <span><span><span><a</span> class<span>="red"</span> data-category<span>="red"</span> href<span>="#"</span>></span>Box1<span><span></a</span>></span> </span> <span><span><span><a</span> class<span>="green"</span> data-category<span>="green"</span> href<span>="#"</span>></span>Box2<span><span></a</span>></span> </span> <span><span><span><a</span> class<span>="blue"</span> data-category<span>="blue"</span> href<span>="#"</span>></span>Box3<span><span></a</span>></span> </span> <span><!-- other anchor/boxes here ... --> </span> <span><span><span></div</span>></span></span>
Beachten Sie, dass ich ein ziemlich grundlegendes Markup eingerichtet habe. Hier ist eine Erklärung dafür:
Jetzt, da Sie einen Überblick über die erforderlichen HTML hatten, können wir die CSS untersuchen.
Jedes Mal, wenn eine Filterkategorie aktiv ist, empfängt die entsprechende Filtertaste die aktive Klasse. Standardmäßig erhält die Schaltfläche mit dem Data-filter = "All" -attribut diese Klasse.
Hier sind die zugehörigen Stile:
<span><span>.filter a</span> { </span> <span>position: relative; </span><span>} </span> <span><span>.filter a.active:before</span> { </span> <span>content: ''; </span> <span>position: absolute; </span> <span>left: 0; </span> <span>top: 0; </span> <span>display: inline-block; </span> <span>width: 0; </span> <span>height: 0; </span> <span>border-style: solid; </span> <span>border-width: 15px 15px 0 0; </span> <span>border-color: #333 transparent transparent transparent; </span><span>}</span>
Außerdem werde ich Flexbox verwenden, um das Layout für die Zielelemente zu erstellen.
Siehe die zugehörigen Stile unten:
<span><span><span><div</span> class<span>="cta filter"</span>></span> </span> <span><span><span><a</span> class<span>="all active"</span> data-filter<span>="all"</span> href<span>="#"</span> role<span>="button"</span>></span>Show All<span><span></a</span>></span> </span> <span><span><span><a</span> class<span>="green"</span> data-filter<span>="green"</span> href<span>="#"</span> role<span>="button"</span>></span>Show Green Boxes<span><span></a</span>></span> </span> <span><span><span><a</span> class<span>="blue"</span> data-filter<span>="blue"</span> href<span>="#"</span> role<span>="button"</span>></span>Show Blue Boxes<span><span></a</span>></span> </span> <span><span><span><a</span> class<span>="red"</span> data-filter<span>="red"</span> href<span>="#"</span> role<span>="button"</span>></span>Show Red Boxes<span><span></a</span>></span> </span><span><span><span></div</span>></span> </span> <span><span><span><div</span> class<span>="boxes"</span>></span> </span> <span><span><span><a</span> class<span>="red"</span> data-category<span>="red"</span> href<span>="#"</span>></span>Box1<span><span></a</span>></span> </span> <span><span><span><a</span> class<span>="green"</span> data-category<span>="green"</span> href<span>="#"</span>></span>Box2<span><span></a</span>></span> </span> <span><span><span><a</span> class<span>="blue"</span> data-category<span>="blue"</span> href<span>="#"</span>></span>Box3<span><span></a</span>></span> </span> <span><!-- other anchor/boxes here ... --> </span> <span><span><span></div</span>></span></span>
Schließlich definiere ich zwei verschiedene CSS -Keyframe -Animationen, die ich später verwenden werde, um die Elemente zu enthüllen:
<span><span>.filter a</span> { </span> <span>position: relative; </span><span>} </span> <span><span>.filter a.active:before</span> { </span> <span>content: ''; </span> <span>position: absolute; </span> <span>left: 0; </span> <span>top: 0; </span> <span>display: inline-block; </span> <span>width: 0; </span> <span>height: 0; </span> <span>border-style: solid; </span> <span>border-width: 15px 15px 0 0; </span> <span>border-color: #333 transparent transparent transparent; </span><span>}</span>
Mit dem Markup und dem CSS können wir das JavaScript/JQuery bauen.
schauen Sie sich den Code unten an, wonach ich erklären werde, was passiert:
<span><span>.boxes</span> { </span> <span>display: flex; </span> <span>flex-wrap: wrap; </span><span>} </span> <span><span>.boxes a</span> { </span> <span>width: 23%; </span> <span>border: 2px solid #333; </span> <span>margin: 0 1% 20px 1%; </span> <span>line-height: 60px; </span><span>}</span>
Jedes Mal, wenn eine Filtertaste geklickt wird, geschieht Folgendes:
Zu diesem Zeitpunkt ist es wichtig, eine Sache zu klären. Beachten Sie die Syntax für die Fadeout () -Methode im obigen Code. Es sieht wie folgt aus:
<span><span>@keyframes zoom-in</span> { </span> <span>0% { </span> <span>transform: scale(.1); </span> <span>} </span> <span>100% { </span> <span>transform: none; </span> <span>} </span><span>} </span> <span><span>@keyframes rotate-right</span> { </span> <span>0% { </span> <span>transform: translate(-100%) rotate(-100deg); </span> <span>} </span> <span>100% { </span> <span>transform: none; </span> <span>} </span><span>} </span> <span><span>.is-animated</span> { </span> <span>animation: .6s zoom-in; </span> // <span>animation: .6s rotate-right; </span><span>}</span>
Sie sind mit dieser Syntax wahrscheinlich besser vertraut:
<span>var $filters = $('.filter [data-filter]'), </span> $boxes <span>= $('.boxes [data-category]'); </span> $filters<span>.on('click', function(e) { </span> e<span>.preventDefault(); </span> <span>var $this = $(this); </span> $filters<span>.removeClass('active'); </span> $<span>this.addClass('active'); </span> <span>var $filterColor = $this.attr('data-filter'); </span> <span>if ($filterColor == 'all') { </span> $boxes<span>.removeClass('is-animated') </span> <span>.fadeOut().promise().done(function() { </span> $boxes<span>.addClass('is-animated').fadeIn(); </span> <span>}); </span> <span>} else { </span> $boxes<span>.removeClass('is-animated') </span> <span>.fadeOut().promise().done(function() { </span> $boxes<span>.filter('[data-category = "' + $filterColor + '"]') </span> <span>.addClass('is-animated').fadeIn(); </span> <span>}); </span> <span>} </span><span>});</span>
Diese Deklarationen haben unterschiedliche Bedeutungen:
Die folgende Demo verwendet die Zoom-In-Animation:
Siehe Stift eine Sortier-/Filterkomponente mit CSS und JQuery (mit Zoomanimation) von SitePoint (@sinepoint) auf CodePen.
und diese Demo verwendet die Dreh-Rechts-Animation:
Siehe Stift eine Sortier-/Filterkomponente mit CSS und JQuery (mit Drehanimation) von SitePoint (@sinepoint) auf CodePen.
Natürlich sind die oben genannten CSS -Animationen optional. Wenn Ihnen diese spezifischen Animationen nicht gefallen, können Sie sie frei entfernen und die Elemente nur mit der Fadein () -Methode von JQuery aufzeigen.
Jetzt, da Sie verstehen, wie die Komponente funktioniert, zeige ich Ihnen, wie Sie eine andere Variation davon erstellen.
Bisher haben Sie vielleicht festgestellt, dass alle Elemente gleichzeitig erscheinen. Ich werde jetzt den Code ändern, um sie nacheinander anzeigen:
<span><span><span><div</span> class<span>="cta filter"</span>></span> </span> <span><span><span><a</span> class<span>="all active"</span> data-filter<span>="all"</span> href<span>="#"</span> role<span>="button"</span>></span>Show All<span><span></a</span>></span> </span> <span><span><span><a</span> class<span>="green"</span> data-filter<span>="green"</span> href<span>="#"</span> role<span>="button"</span>></span>Show Green Boxes<span><span></a</span>></span> </span> <span><span><span><a</span> class<span>="blue"</span> data-filter<span>="blue"</span> href<span>="#"</span> role<span>="button"</span>></span>Show Blue Boxes<span><span></a</span>></span> </span> <span><span><span><a</span> class<span>="red"</span> data-filter<span>="red"</span> href<span>="#"</span> role<span>="button"</span>></span>Show Red Boxes<span><span></a</span>></span> </span><span><span><span></div</span>></span> </span> <span><span><span><div</span> class<span>="boxes"</span>></span> </span> <span><span><span><a</span> class<span>="red"</span> data-category<span>="red"</span> href<span>="#"</span>></span>Box1<span><span></a</span>></span> </span> <span><span><span><a</span> class<span>="green"</span> data-category<span>="green"</span> href<span>="#"</span>></span>Box2<span><span></a</span>></span> </span> <span><span><span><a</span> class<span>="blue"</span> data-category<span>="blue"</span> href<span>="#"</span>></span>Box3<span><span></a</span>></span> </span> <span><!-- other anchor/boxes here ... --> </span> <span><span><span></div</span>></span></span>
Der obige Code ähnelt dem vorherigen, aber es gibt einige unterschiedliche Unterschiede:
Die Demo unten animiert die gefilterten Elemente nacheinander mit der Zoom-In-Animation:
Siehe die sequentielle Filter-/Sortierkomponente der Stift mit CSS & JQuery von SitePoint (@sinepoint) auf CodePen.
Die Demo unten animiert die gefilterten Elemente nacheinander mit der Dreh-Rechts-Animation:
Siehe die sequentielle Filterung/Sortierung von Pen mit CSS und JQuery von SitePoint (@sinepoint) auf CodePen.
Diese Komponente könnte ohne JQuery erstellt werden und kann eine bessere Leistung haben. Die Möglichkeit, die Methoden von Jquery von Fadein () und Fadeout () zu verwenden, ermöglicht einen einfacheren Code, der bestimmte Funktionen für JQuery nutzt.
Lassen Sie mich in den Kommentaren wissen, ob Sie eine andere Lösung haben oder den Code verbessern.
.Filter-GrayScale {
Filter: Grautruppe (100%);
}
In Ihrem jQuery -Code würden Sie Ihrer Switch -Anweisung einen neuen Fall hinzufügen, um das neue zu verarbeiten Filter:
Switch (Filter) {
// Vorhandene Fälle ...
Fall 'Grayscale':
$ Container.AddClass ('Filter-Grauenscale');
Break .
Ja, Sie können diese Filterkomponente mit anderen JavaScript -Bibliotheken verwenden. JQuery ist so konzipiert, dass er mit anderen Bibliotheken kompatibel ist. Sie müssen nur sicherstellen, dass es keine Konflikte zwischen den verschiedenen Bibliotheken gibt. Wenn es Konflikte gibt, können Sie die Noconflict () -Methode von JQuery verwenden, um sie zu vermeiden. Diese Methode setzt den Halt an der Identifikatorin "= Verknüpfung" frei, mit der andere Bibliotheken es verwenden können. Sie können dann den vollständigen Namen von JQuery verwenden, um seine Methoden aufzurufen.
.Container {
Übergang: Filter 1S;
}
Wenn Sie den Filter mit JQuery ändern, wird der Übergang animiert.
Kann ich CSS -Animationen ohne jQuery verwenden? CSS -Animationen sind eine Funktion von CSS und benötigen kein JavaScript. JQuery kann es jedoch erleichtern, Animationen zu verwalten und zu steuern, insbesondere wenn Sie komplexe Animationen haben oder Elemente als Antwort auf Benutzeraktionen animieren möchten.
Hinzufügen eines benutzerdefinierten Filters beinhaltet die Definition einer neuen CSS -Klasse mit dem gewünschten Filtereffekt und dann die entsprechende Funktionalität in Ihrem JQuery -Code. Der Prozess ähnelt dem Hinzufügen weiterer Filter, wie in der Antwort auf Frage 1.
Ja, Sie können diese Filterkomponente mit dynamischem Inhalt verwenden. Sie müssen nur sicherstellen, dass die Filterkomponente nach dem Laden auf den Inhalt angewendet wird. Sie können dies tun, indem Sie die Filterkomponente in der Rückruffunktion Ihrer AJAX -Anforderung oder in der Funktion von $ (Dokument) () () aufrufen, wenn Sie den Inhalt laden, wenn die Seite geladen wird.
Kann ich diese Filterkomponente mit einer Backend -Datenbank verwenden? Komponente mit einer Backend -Datenbank. Sie müssten eine AJAX -Anforderung an den Server stellen, um die Daten aus der Datenbank abzurufen, und dann JQuery verwenden, um die Filterkomponente auf die Daten anzuwenden. Auf diese Weise können Sie Daten basierend auf den in der Datenbank gespeicherten Kriterien filtern.
Das obige ist der detaillierte Inhalt vonErstellen einer Filterkomponente mit CSS -Animationen & JQuery. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!