Comment créer un slider carrousel réactif plein écran avec Owl.js

Dans un précédent article, je vous ai montré comment créer une galerie d'images personnalisée avec slick.js. Aujourd'hui, je vais décrire le processus de création d'un curseur de carrousel animé, réactif et plein écran avec owl.js (ou «Owl Carousel»)..

Comme d'habitude, pour avoir une première idée de ce que nous allons construire, jetez un œil à la démo correspondante de CodePen (consultez la version plus grande pour une meilleure expérience):

Qu'est-ce que Owl Carousel??

Owl.js est un plugin jQuery populaire créé par David Deutch qui vous permet de créer des carrousels réactifs et attrayants. Pour mieux comprendre ce que ce plugin peut vous offrir, consultez les démos.

Heureusement, il est très bien supporté par le navigateur, après avoir été testé sur les appareils suivants:

  • Chrome
  • Firefox
  • Opéra
  • IE7 / 8/10/11
  • iPad Safari
  • iPod4 Safari
  • Nexus 7 Chrome
  • Galaxie s4
  • Nokia 8s Windows8

Pour plus de détails, consultez la documentation.

Débuter avec Owl.js

Pour commencer à utiliser owl, commencez par télécharger et installer les fichiers suivants dans votre projet:

  • jQuery
  • owl.carousel.css ou sa version abrégée
  • owl.carousel.js ou sa version abrégée

Vous pouvez éventuellement importer le fichier owl.theme.default.css fichier.

Vous pouvez récupérer une copie des fichiers owl correspondants en visitant son dépôt Github, en utilisant un gestionnaire de paquets (par exemple, npm) ou en chargeant les ressources nécessaires via un CDN (par exemple, cdnjs). Pour ce tutoriel, je choisirai la dernière option.

Pour les besoins de ce tutoriel, au-delà des fichiers hibou, j'ai également incorporé Babel et Bootstrap 4..

Dans cet esprit, si vous regardez sous le Réglages onglet de notre stylo de démonstration, vous verrez que j’ai inclus trois fichiers CSS externes et deux fichiers JavaScript externes.

1. Le HTML

Pour lancer les choses, nous définissons un carrousel comportant trois diapositives. Chacune de ces diapositives contient un titre, un sous-titre et un bouton d'appel à l'action.

Voici la structure requise pour notre page de démonstration:

Il convient de mentionner deux choses à ce stade:

  1. Le code ci-dessus utilise les classes Bootstrap 4. Le framework Bootstrap n'est pas vital; Je ne l'ai inclus que parce que je voulais accélérer le développement de CSS.
  2. J'ai ajouté l'image de fond de chaque diapositive à travers des styles en ligne. La plupart du temps, lorsqu'il s'agit de contenu dynamique, il s'agit de la méthode CSS la plus courante pour l'ajout d'images de fond..

2. Le CSS

Une fois le code HTML en place, examinons les styles CSS que nous appliquerons à notre page. Pour plus de simplicité, nous ne discuterons qu’une partie des styles disponibles..

Tout d'abord, nous définissons deux propriétés personnalisées et deux classes auxiliaires:

: racine --main-white-color: blanc; --main-black-color: noir;  .static position: static;  .cover background-size: cover; position de fond: centre; répétition de fond: non répétée; 

Ensuite, nous spécifions les styles pour les diapositives du carrousel, y compris les transitions:

.hibou-carrousel. hibou-glissière position: relative; hauteur: 100vh; couleur de fond: gris clair;  .owl-carrousel .owl-slide-animated transformer: translateX (20px); opacité: 0; visibilité: cachée; transition: tous 0.05s;  .owl-carrousel .owl-slide-animated.is-transitioned transformer: aucun; opacité: 1; visibilité: visible; transition: tous les 0.5s;  .owl-carrousel .owl-slide-title.is-transitioned transition-delay: 0.2s;  .owl-carrousel .owl-slide-subtitle.is-transitioned transition-delay: 0.35s;  .owl-carrousel .owl-slide-cta.is-transitioned transition-delay: 0.5s; 

Enfin, nous définissons des règles pour les méthodes de navigation:

.hibou-carrousel. hibou-points,. chouette-carrousel. hibou-nav position: absolue;  .owl-carrousel .owl-dots .owl-dot span background: transparent; bordure: 1px solid var (- couleur principale); transition: tous les 0.2s se relâchent;  .owl-carrousel .owl-dots .owl-dot: envergure du survol, .owl-carrousel .owl-dots .owl-dot.active span background: var (- main-black-color);  .owl-carrousel .owl-nav gauche: 50%; Top 10%; transformer: translateX (-50%); marge: 0; 

Remarque: Les diapositives doivent couvrir toute la hauteur de la fenêtre et nous leur donnons donc hauteur: 100vh. Cependant, comme cette unité n’est pas cohérente sur certains périphériques (par exemple, les périphériques iOS), une autre option consiste à définir la hauteur des diapositives par le biais de JavaScript (pour plus d’informations, reportez-vous au panneau JavaScript de la démo)..

3. Le JavaScript

À ce stade, nous sommes prêts à porter notre attention sur JavaScript.

Initialisation du carrousel

Dans un premier temps, nous allons initialiser le carrousel. Par défaut, le plugin fournit une «navigation par points», mais notre carrousel inclura également des flèches de navigation.. 

Options de navigation par hibou

Nous activons l’option de navigation si le nav propriété de configuration. De plus, nous définissons certains SVG personnalisés comme des flèches grâce au navText propriété de configuration.

Le code qui déclenche le carrousel est présenté ci-dessous:

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

Ajout d'animations aux éléments de la diapositive

Ensuite, nous animons le contenu de chaque diapositive. Ce comportement est traité via le modifié événement que hibou fournit. 

Voici le code associé:

$ owlCarousel.on ("modified.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");); 

Ainsi, chaque fois que nous visitons une nouvelle diapositive, le contenu de toutes les diapositives disparaît tout d'abord. Ensuite, le contenu de la diapositive actuelle apparaît avec une belle animation.

Remarque: à la place du modifié nous aurions pu également utiliser le traduit un événement.

Jusqu'à présent, nous avons vu comment les animations sont déclenchées lorsque nous parcourons les diapositives. Mais nous souhaitons également ce type d’animation lors du chargement initial du carrousel. Pour implémenter cette fonctionnalité, nous allons utiliser le initialisé un événement.

Voici le code lié à cet événement:

/ * vous devez lier l'événement initialisé avant l'initialisation d'owl (voir la démo) * / $ (". owl-carrousel"). on ("initialized.owl.carousel", () => setTimeout (() => $ (".owl-item.active .owl-slide-animated"). addClass ("is-transitioned");, 200););

Dans cet événement, nous ajoutons le est en transition classe aux éléments de la première diapositive.

Il est important de noter que cet événement doit être attaché avant l'initialisation du carrousel..

Prévenir le saut de page lors du chargement

Avant de continuer, couvrons une chose délicate. Si vous regardez la page de démonstration, vous verrez qu'il y a un section élément défini sous le carrousel. Par défaut, jusqu’à ce que le carrousel se charge, le contenu de la section apparaît et un petit saut se produit dans notre page. 

Il y a deux façons de corriger ce comportement indésirable. Tout d’abord, nous pouvons ajouter un préchargeur (nous l’avons déjà fait dans le tutoriel sur les slicks). Une deuxième option que nous allons implémenter ici est de cacher le section et le montrer dès que le carrousel est initialisé.

En termes de code, la règle CSS requise est la suivante:

section display: none; 

Et le code JavaScript:

$ (". owl-carrousel"). sur ("initialized.owl.carousel", () => setTimeout (() => // autre code ici $ ("section"). show ();, 200););

Définition de la position des points

La dernière chose à faire est de positionner la navigation par points. Par défaut, c'est absolument positionné. Les choses suivantes devraient arriver:

  1. Il devrait être aligné horizontalement avec le .hibou-diapositive-texte élément de la diapositive cible. 
  2. Il doit être placé sous cet élément avec un espace supérieur de 20 pixels..

La fonction qui exécute et définit la position souhaitée pour nos points est la setOwlDotsPosition.

Voici cette fonction:

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

Cela isole le .hibou-diapositive-texte élément de la diapositive active et le passe comme argument à la doDCalculs  Sous-fonction.

Voici cette sous-fonction:

fonction doDotsCalculations (el) hauteur constante = el.height (); const haut, gauche = el.position (); const res = hauteur + sommet + 20; $ (". owl-carrousel .owl-dots"). css (top: '$ res px', gauche: '$ left px'); 

Dans cette fonction, nous définissons le Haut et la gauche valeurs de la .hibou-points élément basé sur la hauteur et la position de l'élément cible. 

Restauration pour redimensionnement du navigateur

Pour aller plus loin, la position des points devrait être mise à jour à mesure que nous redimensionnons la fenêtre du navigateur. Pour ce faire, nous tirons parti de la redimensionner événement hibou.

Voici le code nécessaire:

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

Positionnement en fonction du contenu

Enfin et surtout, lorsque nous parcourons les diapositives, les points doivent être repositionnés en fonction de la hauteur et de la position du contenu de la diapositive active. Grace à modifié événement à nouveau, nous sommes en mesure de résoudre cette nouvelle exigence.

Voici le code associé:

$ owlCarousel.on ("modified.owl.carousel", e => // autre code ici const $ currentOwlItem = $ (". owl-item"). eq (e.item.index); const $ target = $ currentOwlItem.find (". owl-slide-text"); doDotsCalculations ($ target););

Astuce Pro

Avant de terminer, discutons d’un bogue courant du hibou Si nous supprimons la section située sous le carrousel, la barre de défilement verticale disparaît etune partie de la diapositive adjacente apparaît.

Pour résoudre ce problème, nous déclenchons la rafraîchir après l’initialisation du carrousel, comme ceci: $ owlCarousel.trigger ("refresh.owl.carousel");

4. Support du navigateur

La démo devrait bien fonctionner dans tous les navigateurs récents et vous pouvez l'utiliser en toute sécurité dans vos projets. Voici un rappel de ce que nous avons construit:

Conclusion

Dans ce didacticiel complet, nous avons réussi à créer un curseur de carrousel animé en plein écran avec owl.js. J'espère que vous aurez acquis de nouvelles compétences que vous pourrez mettre en pratique dans vos projets à venir. Comme toujours, si vous avez des questions, faites le moi savoir dans les commentaires ci-dessous.