Hur man bygger en fullskärmsledande karusellglidare med Owl.js

I ett tidigare inlägg visade jag dig hur du skapar ett anpassat bildgalleri med slick.js. Idag täcker jag processen med att skapa en animerad, lyhörd, fullskärmsladdare med owl.js (eller "Owl Carousel").

Som vanligt, för att få en första uppfattning om vad vi ska bygga, ta en titt på den relaterade CodePen-demoen (kolla in den större versionen för en bättre upplevelse):

Vad är Owl Carousel?

Owl.js är ett populärt jQuery-plugin skapat av David Deutch som låter dig bygga attraktiva och lyhörda karuseller. För att bättre förstå vad det här pluginet kan erbjuda dig, kolla in demonerna.

Lyckligtvis nog har det bra webbläsarstöd, som har testats på följande enheter:

  • Krom
  • Firefox
  • Opera
  • IE7 / 8/10/11
  • iPad Safari
  • iPod4 Safari
  • Nexus 7 Chrome
  • Galaxy S4
  • Nokia 8s Windows8

För mer information ta en titt på dokumentationen.

Komma igång med Owl.js

För att komma igång med uggla börjar du genom att hämta och installera följande filer i ditt projekt:

  • jQuery
  • owl.carousel.css eller dess minifierade version
  • owl.carousel.js eller dess minifierade version

Eventuellt kan du importera owl.theme.default.css fil.

Du kan ta en kopia av motsvarande ugilfiler genom att besöka dess Github repo, genom att använda en pakethanterare (t ex npm) eller genom att ladda de nödvändiga tillgångarna via en CDN (t ex cdnjs). För den här handledningen väljer jag det sista alternativet.

För syftet med denna handledning, bortom owlfilerna, har jag också tagit med Babel och Bootstrap 4.

Med det i åtanke, om du tittar under inställningar fliken i vår demopenna ser du att jag har inkluderat tre externa CSS-filer och två externa JavaScript-filer.

1. HTML

För att sparka bort saker definierar vi en karusell som har tre bilder. Var och en av dessa diabilder innehåller en titel, en undertext och en uppmaningsknapp.

Här är den nödvändiga strukturen för vår demosida:

Det är värt att nämna två saker på den här tiden:

  1. Koden ovan använder Bootstrap 4 klasser. Bootstrap-ramen är inte avgörande; Jag inkluderade det bara för att jag ville påskynda CSS-utvecklingen.
  2. Jag lade till bakgrundsbilden för varje bild genom inline-stilar. För det mesta, när du hanterar dynamiskt innehåll, är detta den vanligaste CSS-metoden för att lägga till bakgrundsbilder.

2. CSS

Med HTML-filen på plats, låt oss titta på CSS-formaten som vi ska söka på vår sida. För enkelhet diskuterar vi bara en del av de tillgängliga stilar.

Först definierar vi två anpassade egenskaper och två hjälparklasser:

: root --main-white-color: white; --Main-svart-färg: svart;  .static position: static;  .cover background-size: cover; bakgrundsställning: center; background-repeat: no-repeat; 

Därefter specificerar vi stilar för karusellrutorna, inklusive övergångarna:

.uggla-carousel.owl-slide position: relative; höjd: 100vh; bakgrundsfärg: lightgray;  .cirkel-carousel.owl-slide-animated transform: translateX (20px); opacitet: 0; synlighet: gömd; övergång: alla 0,05s;  .Wall-carousel.owl-slide-animated.is-transitioned transform: none; opacitet: 1; synlighet: synlig övergång: alla 0,5s;  .wl-carousel .wl-slide-title.is-transitioned övergångsfördröjning: 0.2s;  .ö-karusell .överskridande -titel.transformerad övergångsfördröjning: 0,35s;  .Wall-carousel .wl-slide-cta.is-transitioned övergångsfördröjning: 0.5s; 

Slutligen ställer vi några regler för navigeringsmetoderna:

.uggla-carousel. -pinnar ,.-karusell.owl-nav position: absolut;  .Wall-carousel.owl-dots .owl-dot span background: transparent; gränsen: 1px solid var (- svartvitt); övergång: alla 0.2s lätt; . -karusell. -pinnar. -prop-punkt: svängspännare,. -karusell. -pottar. -dot.aktiv span bakgrund: var (- svartvitt);  .ö-karusell .owl-nav vänster: 50%; topp 10%; transformera: translateX (-50%); marginal: 0; 

Notera: Skivorna ska täcka hela fönsterdjupet och vi ger dem därför höjd: 100vh. Eftersom denna enhet är inkonsekvent över vissa enheter (t.ex. iOS-enheter), är det dock ett annat alternativ att ställa in diabildernas höjd genom JavaScript (se demo-panelen för mer information).

3. JavaScript

Vid denna tidpunkt är vi redo att rikta vår uppmärksamhet åt JavaScript.

Initialisering av karusellen

Som ett första steg initierar vi karusellen. Som standard tillhandahåller plugin "pricknavigering", men vår karusell kommer även att innehålla navigationspilar. 

Owlnavigationsalternativ

Vi aktiverar navigationsalternativet via nav konfigurationsegenskap. Dessutom definierar vi några anpassade SVG som pilar tack vare Navtext konfigurationsegenskap.

Koden som bränner karusellen visas nedan:

const $ owlCarousel = $ ("uggla-carousel"). owlCarousel (objekt: 1, loop: true, nav: true, navText: ['','']);

Lägga till animationer för att glida in element

Som ett nästa steg animerar vi innehållet i varje bild. Detta beteende hanteras genom ändrats händelse som uggla ger. 

Här är den tillhörande koden:

$ owlCarousel.on ("changed.owl.carousel", e => $ ("uggla-animerad"). removeClass ("is-transitioned"); const $ currentOwlItem = $ ) .eq (e.item.index); $ currentOwlItem.find ("uggla-animerad"). addClass ("is-transitioned");); 

Så vi försöker varje gång vi besöker en ny bild, för det första försvinner innehållet i alla bilder. Därefter visas innehållet i den aktuella bilden med en snygg inskjutningsanimation.

Notera: istället för ändrats händelse vi kunde ha lika använt översatt händelse.

Hittills har vi sett hur animationerna avfyras när vi cyklar genom bilderna. Men vi vill också ha den typen av animering när karusellen initialt laddas. För att implementera denna funktionalitet använder vi initialiseras händelse.

Här är koden relaterad till den här händelsen:

/ * du måste binda initialiserad händelse före owlens initialisering (se demo) * / $ ("uggla-karusell") på ("initialized.owl.carousel", () => setTimeout (() => $ (".owl-item.active .owl-slide-animated"). addClass ("is-transitioned");, 200););

Inom den händelsen lägger vi till är-transitioned klass till elementen i den första bilden.

Det är viktigt att notera att denna händelse måste bifogas före karusellens initialisering.

Förhindra sidan Hoppa på laddning

Innan vi går vidare, låt oss täcka en knepig sak. Om du tittar på demosidan ser du att det finns en sektion element definierat under karusellen. Som standard, tills karusellen fyller, visas sektionsinnehållet och ett litet hoppa sker på vår sida. 

Det finns två sätt att åtgärda detta oönskade beteende. Först kan vi lägga till en preloader (det gjorde vi redan i den slickrelaterade handledningen). Ett andra alternativ som vi ska implementera här är att dölja sektion och visa det så snart karusellen initieras.

När det gäller kod krävs den CSS-regel som är den här:

avsnitt display: none; 

Och JavaScript-koden:

$ ("uggla-karusell"). På ("initialized.owl.carousel", () => setTimeout (() => // annan kod här $ ("section"). 200););

Ställa in punkteringspositionen

Det sista vi behöver göra är att placera punkterna navigation. Som standard är den helt placerad. Följande saker bör hända:

  1. Den ska anpassas horisontellt med .uggla-slide-text del av målglaset. 
  2. Den ska placeras under det elementet med en 20px topplucka.

Funktionen som körs och ställer in önskad position för våra prickar är setOwlDotsPosition.

Här är den funktionen:

funktion setOwlDotsPosition () const $ target = $ (". owl-item.active .owl-slide-text"); doDotsCalculations ($ mål); 

Detta isolerar .uggla-slide-text elementet i den aktiva bilden och skickar den som ett argument till doDotsCalculations  underfunktion.

Här är den delfunktionen:

funktion doDotsCalculations (el) const height = el.height (); const topp, vänster = el.position (); const res = höjd + topp + 20; $ ("uggla-carousel .owl-dots"). css (top: '$ res px', vänster: '$ left px'); 

Inne i den här funktionen ställer vi in ​​lämpliga topp och vänster värden av .owl-dots element baserat på målelementets höjd och position. 

Catering för Browser Resize

Går ett steg längre, bör prickarnas position uppdateras när vi ändrar storleken på webbläsarfönstret. För att uppnå detta utnyttjar vi ändra storlek uggla händelse.

Här är den nödvändiga koden:

$ owlCarousel.on ("resize.owl.carousel", () => setTimeout (() => setOwlDotsPosition ();, 50););

Positionering Beroende på innehållet

Sist men inte minst, när vi navigerar genom bilderna måste punkterna flyttas beroende på höjden och positionen av innehållet i den aktiva bilden. Tack vare ändrats händelse igen, vi kan lösa det nya kravet.

Här är den relaterade koden:

$ owlCarousel.on ("changed.owl.carousel", e => // annan kod här const $ currentOwlItem = $ ("owl-item"). eq (e.item.index); const $ target = $ currentOwlItem.find ("ugla-slide-text"); doDotsCalculations ($ target););

Proffstips

Innan du stänger, låt oss diskutera en vanlig uggla. Om vi ​​tar bort det avsnitt som sitter under karusellen, försvinner den vertikala rullningsfältet ochEn del av den intilliggande bilden visas.

För att åtgärda detta utlöser vi refresh händelse efter karusellinitialiseringen, så här: $ OwlCarousel.trigger ( "refresh.owl.carousel");

4. Browser Support

Demon ska fungera bra i alla nya webbläsare och du kan använda det säkert i dina projekt. Här är en påminnelse om vad vi har byggt:

Slutsats

I den här noggranna handledningen lyckades vi bygga en animerad fullskärmsladdare med owl.js. Förhoppningsvis har du fått några nya färdigheter som du kommer att kunna genomföra i dina kommande projekt. Som alltid, om du har några frågor, låt mig veta i kommentarerna nedan.