I et tidligere innlegg viste jeg deg hvordan du bygger et tilpasset bildegalleri med slick.js. I dag skal jeg dekke prosessen med å skape en animert, lydhør, fullskjerm karusell glidebryter med owl.js (eller "Owl Carousel")..
Som vanlig, for å få en innledende ide om hva vi skal bygge, ta en titt på den relaterte CodePen-demoen (sjekk ut den større versjonen for en bedre opplevelse):
Owl.js er et populært jQuery-plugin laget av David Deutch som lar deg bygge attraktive og lydhørlige karuseller. For bedre å forstå hva dette pluginet kan tilby deg, sjekk demoene.
Heldigvis har den stor nettleserstøtte, etter å ha blitt testet på følgende enheter:
For mer informasjon ta en titt på dokumentasjonen.
For å komme i gang med ugle, begynn å laste ned og installere følgende filer i prosjektet ditt:
owl.carousel.css
eller den minifiserte versjonenowl.carousel.js
eller den minifiserte versjonenEventuelt vil du kanskje importere owl.theme.default.css
fil.
Du kan ta en kopi av de tilsvarende uglefilene ved å besøke Github-repoen, ved å bruke en pakkebehandling (for eksempel npm), eller ved å laste de nødvendige eiendelene gjennom en CDN (for eksempel cdnjs). For denne opplæringen velger jeg det siste alternativet.
I forbindelse med denne opplæringen, utover uglefilene, har jeg også tatt med Babel og Bootstrap 4.
Med det i tankene, hvis du ser under innstillinger fanen i vår demo penn, ser du at jeg har tatt med tre eksterne CSS-filer og to eksterne JavaScript-filer.
For å sparke ting, definerer vi en karusell som har tre lysbilder. Hvert av disse lysbildene inneholder en tittel, en undertekst og en handlingsknapp.
Her er den nødvendige strukturen for vår demo side:
Det er verdt å nevne to ting på dette punktet:
Med HTML-en på plass, la oss se på CSS-stilene vi vil søke på vår side. For enkelhet, diskuterer vi bare en del av de tilgjengelige stilene.
Først definerer vi to egendefinerte egenskaper og to hjelperklasser:
: rot --main-hvit-farge: hvit; --Main-svart-farge: svart; .statisk posisjon: statisk; .cover background-size: cover; bakgrunnsposisjon: senter; bakgrunn-gjentak: ikke-gjenta;
Deretter spesifiserer vi stiler for karusellglassene, inkludert overgangene:
.ugle-karusell .owl-slide posisjon: relative; høyde: 100vh; bakgrunnsfarge: lightgray; .øll-karusell .owl-slide-animated transform: translateX (20px); opasitet: 0; synlighet: skjult; overgang: alle 0,05s; .øll-karusell .wl-slide-animated.is-transitioned transform: none; opasitet: 1; synlighet: synlig; overgang: alle 0,5s; .øll-karusell .owl-slide-title.is-overført overgangsforsinkelse: 0.2s; .øll-karusell .owl-slide-subtitle.is-transitioned overgangsforsinkelse: 0.35s; .-karusell. -lid-slide-cta.is-overført overgangsforsinkelse: 0,5s;
Til slutt bestemmer vi noen regler for navigasjonsmetodene:
.ugle-karusell .øll-prikker ,.-karusell .owl-nav posisjon: absolutt; . -karusell. -pottene. -dot-span bakgrunn: gjennomsiktig; border: 1px solid var (- main-black-color); Overgang: alle 0,2 enkel; .lås-karusell .lugg-prikker. -lokk-punkt: hover-spenning, .lv-karusell .lugg-prikker .loddot.aktiv span (bakgrunn: var (- svartvann); .øll-karusell .owl-nav left: 50%; topp 10%; transformere: translateX (-50%); margin: 0;
Merk: Lysbildene skal dekke hele vinduets høyde og vi gir dem derfor høyde: 100vh
. Men siden denne enheten er inkonsekvent på tvers av enkelte enheter (for eksempel iOS-enheter), er et annet alternativ å sette lysbildene høyde gjennom JavaScript (se JavaScript-panelet i demoen for mer info).
På dette tidspunktet er vi klar til å gjøre oppmerksomheten vår til JavaScript.
Som et første skritt, vil vi initialisere karusellen. Som standard gir plugin "dotsnavigasjon", men vår karusell vil også inkludere navigasjonspiler.
Owl navigasjonsalternativerVi aktiverer navigasjonsalternativet gjennom nav
konfigurasjonsegenskap. I tillegg definerer vi noen tilpassede SVGer som piler takket være navText
konfigurasjonsegenskap.
Koden som brenner karusellen, vises nedenfor:
const $ owlCarousel = $ ("ugle-karusell") .OwlCarousel (elementer: 1, loop: true, nav: true, navText: ['','']);
Som et neste skritt, animerer vi innholdet på hvert lysbilde. Denne oppførselen håndteres gjennom endret
hendelse som ugle gir.
Her er den tilknyttede koden:
$ owlCarousel.on ("changed.owl.carousel", e => $ ("ugle-slide animated"). removeClass ("er-overført"); const $ currentOwlItem = $ ("ugle-item" ) .eq (e.item.index); $ currentOwlItem.find ("ugle-slide-animert"). addClass ("is-transitioned"););
Så hver gang vi besøker et nytt lysbilde, for det første forsvinner innholdet i alle lysbildene. Deretter vises innholdet i gjeldende lysbilde med en fin lysbilde animasjon.
Merk: i stedet for endret
hendelse vi kunne ha brukt like mye oversatt
begivenhet.
Så langt har vi sett hvordan animasjonene blir avfyrt når vi sykler gjennom lysbildene. Men vi vil også ha den slags animasjon når karusellen først laster. For å implementere denne funksjonaliteten bruker vi initialisert
begivenhet.
Her er koden knyttet til denne hendelsen:
/ * du må binde initialisert hendelse før ugles initialisering (se demo) * / $ ("ugle-karusell"). På ("initialized.owl.carousel", () => setTimeout (() => $ (".owl-item.active .owl-slide-animated"). addClass ("is-transitioned");, 200););
I den hendelsen legger vi til er-overført
klasse til elementene i første lysbilde.
Det er viktig å merke seg at denne hendelsen må festes før karusellens initialisering.
Før du går videre, la oss dekke en vanskelig ting. Hvis du ser på demosiden, ser du at det er en seksjon
element definert under karusellen. Som standard, til karusellen laster, vises seksjonsinnholdet og det skjer et lite hopp på vår side.
Det er to måter å fikse denne uønskede oppførelsen på. Først kan vi legge til en forhåndsinnlaster (det gjorde vi allerede i den slick-relaterte opplæringen). Et annet alternativ som vi skal implementere her er å skjule seksjon
og vis det så snart karusellen er initialisert.
Når det gjelder kode, er CSS-regelen nødvendig:
seksjon display: none;
Og JavaScript-koden:
$ ("ugle-karusell"). På ("initialized.owl.carousel", () => setTimeout (() => // annen kode her $ ("section"). 200););
Det siste vi må gjøre er å plassere prikknavigasjonen. Som standard er den helt posisjonert. Følgende ting skal skje:
.ugle-slide-tekst
element i målruten. Funksjonen som kjører og setter ønsket posisjon for prikkene våre er setOwlDotsPosition
.
Her er den funksjonen:
funksjon setOwlDotsPosition () const $ target = $ (". owl-item.active .owl-slide-text"); doDotsCalculations ($ mål);
Dette isolerer .ugle-slide-tekst
element i det aktive lysbildet og overfører det som et argument til doDotsCalculations
underfunksjon.
Her er den delfunksjonen:
funksjon doDotsCalculations (el) const height = el.height (); const topp, venstre = el.position (); const res = høyde + topp + 20; $ ("ugle-carousel .owl-dots"). css (top: '$ res px', venstre: '$ left px');
Innenfor denne funksjonen setter vi det riktige topp
og venstre
verdier av .ugle-prikker
element basert på målelementets høyde og posisjon.
Går et skritt videre, bør punktene posisjoneres når vi endrer størrelsen på nettleservinduet. For å oppnå dette, utnytter vi endre størrelse på
ugle hendelse.
Her er den nødvendige koden:
$ ugleCarousel.on ("resize.owl.carousel", () => setTimeout (() => setOwlDotsPosition ();, 50););
Sist men ikke minst, når vi navigerer gjennom lysbildene, må prikkene flyttes avhengig av høyden og posisjonen til innholdet i den aktive lysbilden. Takk til endret
hendelsen igjen, vi er i stand til å løse det nye kravet.
Her er den relaterte koden:
$ owlCarousel.on ("changed.owl.carousel", e => // annen kode her const $ currentOwlItem = $ ("ugle-element"). eq (e.item.index); const $ target = $ currentOwlItem.find ("ugle-slide-text"); doDotsCalculations ($ target););
Før du lukker, la oss diskutere en vanlig uglebug. Hvis vi fjerner delen som sitter under karusellen, forsvinner den vertikale rullefeltet ogen del av det tilstøtende lysbildet vises.
For å fikse dette, utløser vi forfriske
hendelse etter karusellinitialiseringen, slik: $ OwlCarousel.trigger ( "refresh.owl.carousel");
Demoen skal fungere godt i alle nyere nettlesere, og du kan trygt bruke den i prosjektene dine. Her er en påminnelse om hva vi har bygget:
I denne grundige opplæringen klarte vi å bygge en animert fullskjerm karusell glidebryter med owl.js. Forhåpentligvis har du oppnådd noen nye ferdigheter som du vil kunne sette i bruk i kommende prosjekter. Som alltid, hvis du har noen spørsmål, gi meg beskjed i kommentarene nedenfor.