Come creare un dispositivo di scorrimento a carosello reattivo a schermo intero con Owl.js

In un post precedente ti ho mostrato come creare una galleria di immagini personalizzate con slick.js. Oggi parlerò del processo di creazione di uno slider animato, reattivo, a tutto schermo con giostra con owl.js (o "Owl Carousel").

Come al solito, per avere un'idea iniziale di ciò che costruiremo, dai un'occhiata alla relativa demo CodePen (controlla la versione più grande per una migliore esperienza):

Cos'è il Gufo del carosello?

Owl.js è un popolare plugin jQuery creato da David Deutch che ti consente di creare caroselli interessanti e reattivi. Per capire meglio cosa questo plugin può offrirti, dai un'occhiata alle demo.

Fortunatamente, ha un ottimo supporto per i browser, essendo stato testato sui seguenti dispositivi:

  • Cromo
  • Firefox
  • musica lirica
  • IE7 / 8/10/11
  • iPad Safari
  • iPod4 Safari
  • Nexus 7 Chrome
  • Galaxy s4
  • Nokia 8s Windows8

Per maggiori dettagli dare un'occhiata alla documentazione.

Iniziare con Owl.js

Per iniziare con gufo, inizia scaricando e installando i seguenti file nel tuo progetto:

  • jQuery
  • owl.carousel.css o la sua versione minificata
  • owl.carousel.js o la sua versione minificata

Opzionalmente, potresti voler importare il owl.theme.default.css file.

Puoi prendere una copia dei file gufo corrispondenti visitando il repository Github, utilizzando un gestore di pacchetti (ad esempio npm) o caricando le risorse necessarie tramite un CDN (ad esempio cdnjs). Per questo tutorial, sceglierò l'ultima opzione.

Ai fini di questo tutorial, oltre ai file owl, ho anche incorporato Babel e Bootstrap 4.

Con questo in mente, se guardi sotto il impostazioni scheda della nostra penna dimostrativa, vedrai che ho incluso tre file CSS esterni e due file JavaScript esterni.

1. L'HTML

Per dare il calcio d'inizio definiamo un carosello che ha tre diapositive. Ciascuna di queste diapositive contiene un titolo, un sottotitolo e un pulsante di invito all'azione.

Ecco la struttura richiesta per la nostra pagina demo:

Vale la pena menzionare due cose a questo punto:

  1. Il codice sopra fa uso di classi Bootstrap 4. Il framework Bootstrap non è vitale; L'ho incluso solo perché volevo accelerare lo sviluppo dei CSS.
  2. Ho aggiunto l'immagine di sfondo di ogni diapositiva attraverso gli stili in linea. La maggior parte delle volte, quando si ha a che fare con contenuti dinamici, questo è il metodo CSS più comune per aggiungere immagini di sfondo.

2. Il CSS

Con l'HTML in atto, diamo un'occhiata agli stili CSS che applicheremo alla nostra pagina. Per semplicità, discuteremo solo una parte degli stili disponibili.

Innanzitutto, definiamo due proprietà personalizzate e due classi helper:

: root --main-white-color: white; --main-black-color: nero;  .static position: static;  .cover background-size: cover; posizione di sfondo: centro; background-repeat: no-repeat; 

Successivamente, specifichiamo gli stili per le diapositive del carosello, incluse le transizioni:

.owl-carousel .owl-slide position: relative; altezza: 100 vh; background-color: lightgray;  .owl-carousel .owl-slide-animated transform: translateX (20px); opacità: 0; visibilità: nascosta; transizione: tutti gli 0.05;  .owl-carousel .owl-slide-animated.is-transitioned transform: none; opacità: 1; visibilità: visibile; transizione: tutti gli 0,5;  .owl-carousel .owl-slide-title.is-transitioned transition-delay: 0.2s;  .owl-carousel .owl-slide-subtitle.is-transitioned transition-delay: 0.35s;  .owl-carousel .owl-slide-cta.is-transitioned transition-delay: 0.5s; 

Infine, impostiamo alcune regole per i metodi di navigazione:

.gufo-carousel .owl-dots, .owl-carousel .owl-nav position: absolute;  .owl-carousel .owl-dots .owl-dot span background: transparent; border: 1px solid var (- main-black-color); transizione: tutti gli anni '20 si adattano;  .owl-carousel .owl-dots .owl-dot: hover span, .owl-carousel .owl-dots .owl-dot.active span background: var (- main-black-color);  .owl-carousel .owl-nav left: 50%; superiore: 10%; transform: translateX (-50%); margine: 0; 

Nota: Le diapositive dovrebbero coprire l'intera altezza della finestra e quindi le diamo altezza: 100 vh. Tuttavia, poiché questa unità è incoerente su alcuni dispositivi (ad esempio dispositivi iOS), un'altra opzione è impostare l'altezza delle diapositive tramite JavaScript (vedere il pannello JavaScript della demo per maggiori informazioni).

3. Il JavaScript

A questo punto siamo pronti a rivolgere la nostra attenzione al JavaScript.

Inizializzazione del carosello

Come primo passo, inizializzeremo la giostra. Di default il plugin fornisce "punti di navigazione", ma il nostro carosello includerà anche le frecce di navigazione. 

Opzioni di navigazione del gufo

Abilitiamo l'opzione di navigazione attraverso il nav proprietà di configurazione. Inoltre, definiamo alcuni SVG personalizzati come frecce grazie a navText proprietà di configurazione.

Il codice che attiva il carosello è mostrato di seguito:

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

Aggiunta di animazioni agli elementi diapositiva

Come passo successivo, animiamo il contenuto di ogni diapositiva. Questo comportamento è gestito attraverso il cambiato evento che fornisce il gufo. 

Ecco il codice associato:

$ 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");); 

Ogni volta che visitiamo una nuova diapositiva, in primo luogo spariscono i contenuti di tutte le diapositive. Quindi, il contenuto della diapositiva corrente appare con una bella animazione slide-in.

Nota: invece del cambiato evento avremmo potuto ugualmente usare il tradotto evento.

Finora, abbiamo visto come vengono generate le animazioni mentre scorriamo le diapositive. Ma vogliamo anche questo tipo di animazione quando la giostra si carica inizialmente. Per implementare questa funzionalità, useremo il inizializzato evento.

Ecco il codice relativo a questo evento:

/ * devi associare l'evento inizializzato prima dell'inizializzazione di gufo (vedi demo) * / $ (". owl-carousel"). on ("initialized.owl.carousel", () => setTimeout (() => $ (".owl-item.active .owl-slide-animated"). addClass ("is-transitioned");, 200););

All'interno di quell'evento aggiungiamo il è-transizione classe agli elementi della prima diapositiva.

È importante notare che questo evento deve essere allegato prima dell'inizializzazione del carousel.

Prevenire il salto della pagina al caricamento

Prima di andare avanti, copriamo una cosa difficile. Se guardi la pagina demo, vedrai che c'è un sezione elemento definito sotto il carosello. Per impostazione predefinita, fino a quando il caricatore non si carica, viene visualizzato il contenuto della sezione e nella pagina viene visualizzato un piccolo salto. 

Esistono due modi per risolvere questo comportamento indesiderato. Innanzitutto, possiamo aggiungere un preloader (lo abbiamo già fatto nel tutorial relativo a slick). Una seconda opzione che implementeremo qui è quella di nascondere il sezione e mostralo non appena viene inizializzata la giostra.

In termini di codice, la regola CSS necessaria è questa:

sezione display: nessuno; 

E il codice JavaScript:

$ (". owl-carousel"). on ("initialized.owl.carousel", () => setTimeout (() => // altro codice qui $ ("section"). show ();, 200););

Impostazione della posizione dei punti

L'ultima cosa che dobbiamo fare è posizionare la navigazione dei punti. Di default, è assolutamente posizionato. Le seguenti cose dovrebbero accadere:

  1. Dovrebbe essere allineato orizzontalmente con il .gufo-slide-text elemento della diapositiva di destinazione. 
  2. Dovrebbe essere posizionato sotto quell'elemento con uno spacco superiore di 20px.

La funzione che esegue e imposta la posizione desiderata per i nostri punti è la setOwlDotsPosition.

Ecco quella funzione:

function setOwlDotsPosition () const $ target = $ (". owl-item.active .owl-slide-text"); doDotsCalculations ($ target); 

Questo isola il .gufo-slide-text elemento della diapositiva attiva e lo passa come argomento al doDotsCalculations  sottofunzione.

Ecco la sotto-funzione:

function doDotsCalculations (el) const height = el.height (); const top, left = el.position (); const res = height + top + 20; $ (". owl-carousel .owl-dots"). css (top: '$ res px', a sinistra: '$ left px'); 

All'interno di questa funzione impostiamo l'appropriato superiore e sinistra valori del .OWL-punti elemento basato sull'altezza e sulla posizione dell'elemento obiettivo. 

Catering per ridimensionare il browser

Andando oltre, la posizione dei punti dovrebbe essere aggiornata mentre ridimensioniamo la finestra del browser. Per ottenere ciò, sfruttiamo il ridimensionare evento gufo.

Ecco il codice necessario:

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

Posizionamento in base al contenuto

Ultimo ma non meno importante, mentre navighiamo attraverso le diapositive, i punti devono essere riposizionati in base all'altezza e alla posizione dei contenuti della diapositiva attiva. Grazie al cambiato evento di nuovo, siamo in grado di risolvere questo nuovo requisito.

Ecco il codice relativo:

$ owlCarousel.on ("changed.owl.carousel", e => // altro codice qui const $ currentOwlItem = $ (". owl-item"). eq (e.item.index); const $ target = $ currentOwlItem.find (". owl-slide-text"); doDotsCalculations ($ target););

Suggerimento

Prima di concludere, discutiamo di un bug di gufo comune. Se rimuoviamo la sezione che si trova sotto il carosello, la barra di scorrimento verticale scompare eappare una parte della diapositiva adiacente.

Per risolvere questo problema, attiviamo il ricaricare evento dopo l'inizializzazione del carosello, come questo: $ OwlCarousel.trigger ( "refresh.owl.carousel");

4. Supporto per browser

La demo dovrebbe funzionare bene in tutti i browser recenti e puoi tranquillamente usarla nei tuoi progetti. Ecco un promemoria di ciò che abbiamo costruito:

Conclusione

In questo esauriente tutorial, siamo riusciti a creare un cursore animato a tutto schermo con giostra con owl.js. Speriamo che avrai acquisito alcune nuove competenze che sarai in grado di mettere in pratica nei tuoi prossimi progetti. Come sempre, se avete domande, fatemelo sapere nei commenti qui sotto.