In een vorige post heb ik je laten zien hoe je een aangepaste afbeeldingengalerij kon bouwen met slick.js. Vandaag zal ik het proces van het maken van een geanimeerde, responsieve carrouselslider op volledig scherm met owl.js (of "Owl Carousel") bespreken.
Zoals gewoonlijk, om een idee te krijgen van wat we gaan bouwen, kun je de gerelateerde CodePen-demo bekijken (bekijk de grotere versie voor een betere ervaring):
Owl.js is een populaire plug-in voor jQuery, gemaakt door David Deutch, waarmee je aantrekkelijke, responsieve carrousels kunt bouwen. Raadpleeg de demo's voor meer informatie over wat deze plug-in u kan bieden.
Gelukkig heeft het geweldige ondersteuning voor browsers, omdat het is getest op de volgende apparaten:
Raadpleeg de documentatie voor meer informatie.
Om te beginnen met Owl, begint u met het downloaden en installeren van de volgende bestanden in uw project:
owl.carousel.css
of de verkleinde versie ervanowl.carousel.js
of de verkleinde versie ervanEventueel wilt u misschien het importeren owl.theme.default.css
het dossier.
U kunt een kopie van de overeenkomstige uilbestanden nemen door de Github-repo te bezoeken, door een pakketbeheerder (bijvoorbeeld npm) te gebruiken of door de benodigde items te laden via een CDN (bijvoorbeeld cdnjs). Voor deze zelfstudie kies ik de laatste optie.
Voor deze tutorial heb ik naast de uil-bestanden ook Babel en Bootstrap 4 opgenomen.
Met dat in gedachten, als je kijkt onder de instellingen Op het tabblad van onze demopen kunt u zien dat ik drie externe CSS-bestanden en twee externe JavaScript-bestanden heb toegevoegd.
Om dingen uit te schakelen, definiëren we een carrousel met drie dia's. Elk van die dia's bevat een titel, een ondertitel en een call-to-action-knop.
Dit is de vereiste structuur voor onze demopagina:
Er zijn op dit moment twee dingen te vermelden:
Laten we, met de HTML-code, kijken naar de CSS-stijlen die we op onze pagina zullen toepassen. Voor de eenvoud bespreken we slechts een deel van de beschikbare stijlen.
Eerst definiëren we twee aangepaste eigenschappen en twee helperklassen:
: root --main-white-color: white; - hoofdkleur-zwart: zwart; .static positie: statisch; .cover background-size: cover; achtergrond-positie: midden; achtergrondherhaling: geen herhaling;
Vervolgens specificeren we stijlen voor de carrouseldia's, inclusief de overgangen:
.owl-carrousel .owl-slide position: relative; hoogte: 100vh; achtergrondkleur: lichtgrijs; .owl-carrousel .owl-slide-geanimeerde transform: translateX (20px); dekking: 0; zichtbaarheid: verborgen; overgang: alle 0.05s; .owl-carrousel .owl-slide-animated.is-transmed transform: none; dekking: 1; zichtbaarheid: zichtbaar; overgang: alle 0,5s; .owl-carrousel .owl-slide-title.is-transitie overgangsvertraging: 0.2s; .owl-carrousel .owl-slide-subtitle.is-transitioned overgangsvertraging: 0.35s; .owl-carrousel .owl-slide-cta.is-transitie overgangsvertraging: 0.5s;
Ten slotte stellen we enkele regels voor de navigatiemethoden:
.uil-carrousel .owl-dots, .owl-carrousel .owl-nav position: absolute; .owl-carrousel .owl-dots .owl-dot span background: transparent; rand: 1px vaste var (- hoofdzwarte kleur); overgang: alle 0.2s gemak; .owl-carrousel .owl-dots .owl-dot: hover span, .owl-carousel .owl-dots .owl-dot.active span background: var (- main-black-color); .owl-carrousel .owl-nav left: 50%; top 10%; transformatie: translateX (-50%); marge: 0;
Notitie: De dia's moeten de volledige hoogte van het venster beslaan en daarom geven we ze hoogte: 100vh
. Omdat dit apparaat op sommige apparaten niet consistent is (bijvoorbeeld iOS-apparaten), is een andere optie om de hoogte van de dia's in te stellen via JavaScript (zie het JavaScript-paneel van de demo voor meer informatie).
Op dit moment zijn we klaar om onze aandacht op het JavaScript te richten.
Als eerste stap zullen we de carrousel initialiseren. Standaard biedt de plug-in "stippennavigatie", maar onze carrousel bevat ook navigatiepijlen.
Uil navigatie-optiesWe schakelen de navigatie-optie in via nav
configuratie-eigenschap. Daarnaast definiëren we enkele aangepaste SVG's als pijlen dankzij de Navtext
configuratie-eigenschap.
De code die de carrousel afvuurt, wordt hieronder weergegeven:
const $ owlCarousel = $ (".uil-carrousel"). owlCarousel (items: 1, loop: true, nav: true, navText: ['','']);
Als volgende stap animeren we de inhoud van elke dia. Dit gedrag wordt behandeld via de veranderd
evenement dat uil biedt.
Hier is de bijbehorende code:
$ owlCarousel.on ("changed.owl.carousel", e => $ (". owl-slide-animated"). removeClass ("is-transitioned"); const $ currentOwlItem = $ (". owl-item" ) .eq (e.item.index); $ currentOwlItem.find (". owl-slide-animated"). addClass ("is-transitioned"););
Dus elke keer dat we een nieuwe dia bezoeken, verdwijnt eerst de inhoud van alle dia's. Vervolgens wordt de inhoud van de huidige dia weergegeven met een mooie inwerpanimatie.
Notitie: in plaats van de veranderd
gebeurtenis hadden we evengoed de vertaalde
evenement.
Tot nu toe hebben we gezien hoe de animaties worden afgevuurd terwijl we door de dia's fietsen. Maar we willen ook dat soort animatie wanneer de carrousel aanvankelijk laadt. Om deze functionaliteit te implementeren, gebruiken we de begonnen
evenement.
Hier is de code met betrekking tot dit evenement:
/ * je moet een geïnitialiseerde gebeurtenis binden vóór de initialisatie van de uil (zie demo) * / $ (".uil-carrousel"). on ("initialized.owl.carousel", () => setTimeout (() => $ (".owl-item.active .owl-slide-animated"). addClass ("is-transitioned");, 200););
Binnen dat evenement voegen we de is-overgezette
klasse aan de elementen van de eerste dia.
Het is belangrijk op te merken dat deze gebeurtenis moet worden bevestigd voordat de carrousel wordt geïnitialiseerd.
Laten we, voordat we verder gaan, één ding bedenken. Als je naar de demopagina kijkt, zie je dat er een is sectie
element gedefinieerd onder de carrousel. Standaard verschijnt, tot de carrousel laadt, de sectie-inhoud en een kleine sprong gebeurt op onze pagina.
Er zijn twee manieren om dit ongewenste gedrag op te lossen. Ten eerste kunnen we een preloader toevoegen (dat deden we al in de zelfstudie over slicks). Een tweede optie die we hier zullen implementeren is het verbergen van de sectie
en laat het zien zodra de carrousel geïnitialiseerd is.
In termen van code is de vereiste CSS-regel deze:
sectie weergave: geen;
En de JavaScript-code:
$ (".uil-carrousel"). on ("initialized.owl.carousel", () => setTimeout (() => // andere code hier $ ("sectie"). show ();, 200););
Het laatste dat we moeten doen is de puntnavigatie positioneren. Standaard is het absoluut gepositioneerd. De volgende dingen zouden moeten gebeuren:
.uil-slide-text
element van de doelschuif. De functie die wordt uitgevoerd en de gewenste positie voor onze punten instelt, is de setOwlDotsPosition
.
Hier is die functie:
function setOwlDotsPosition () const $ target = $ (". owl-item.active.owl-slide-text"); doDotsCalculations ($ doel);
Dit isoleert de .uil-slide-text
element van de actieve dia en geeft deze door aan de doDotsCalculations
Sub functie.
Hier is die subfunctie:
function doDotsCalculations (el) const height = el.height (); const top, left = el.position (); const res = hoogte + top + 20; $ (".uil-carrousel .owl-dots"). css (top: '$ res px', links: '$ left px');
Binnen deze functie stellen we de juiste in top
en links
waarden van de .uil-dots
element op basis van de hoogte en positie van het doelelement.
Ga een stap verder en de positie van de stippen moet worden bijgewerkt als we het formaat van het browservenster aanpassen. Om dit te bereiken, profiteren we van de verkleinen
uil evenement.
Hier is de benodigde code:
$ owlCarousel.on ("resize.owl.carousel", () => setTimeout (() => setOwlDotsPosition ();, 50););
Last but not least, terwijl we door de dia's navigeren, moeten de punten opnieuw worden gepositioneerd, afhankelijk van de hoogte en positie van de inhoud van de actieve dia. Dankzij de veranderd
evenement opnieuw, we zijn in staat om die nieuwe vereiste op te lossen.
Hier is de bijbehorende code:
$ owlCarousel.on ("changed.owl.carousel", e => // andere code hier const $ currentOwlItem = $ (". owl-item"). eq (e.item.index); const $ target = $ currentOwlItem.find (". owl-slide-text"); doDotsCalculations ($ target););
Voordat we sluiten, bespreken we één veel voorkomende uilinsect. Als we het gedeelte verwijderen dat onder de carrousel zit, verdwijnt de verticale schuifbalk eneen deel van de aangrenzende dia verschijnt.
Om dit op te lossen, activeren we de verversen
evenement na de carrousel-initialisatie, zoals deze: $ OwlCarousel.trigger ( "refresh.owl.carousel");
De demo zou goed moeten werken in alle recente browsers en je kunt hem veilig gebruiken in je projecten. Hier is een herinnering aan wat we hebben gebouwd:
In deze grondige zelfstudie hebben we een geanimeerde schuifregelaar voor volledig schermcarrousels gemaakt met owl.js. Hopelijk heb je een aantal nieuwe vaardigheden opgedaan die je in de praktijk kunt brengen in je aankomende projecten. Zoals altijd, als je vragen hebt, laat het me weten in de reacties hieronder.