Comment créer une présentation de la Journée de l'esprit animé avec fullPage.js

Le 18 octobre 2018 est la Journée de l'esprit, chose que nous reconnaissons chaque année à Tuts +, et ce jour-là, nous dénonçons le harcèlement des LGBTQ, en particulier chez les jeunes LGBTQ..

Dans ce tutoriel, vous apprendrez à créer une présentation animée de la Spirit Day avec fullPage v3..  

Voici ce que nous allons construire:

Remarque: Vous vous souvenez peut-être d'un autre tutoriel que j'ai écrit sur fullPage il y a quelque temps. Ce tutoriel utilise fullPage v2, mais comme de nombreuses personnes utilisent encore la v2 dans leurs projets, il n’est pas nécessaire de valider ce tutoriel dans les archives..


Qu'est-ce que fullPage.js v3?

fullPage.js est une bibliothèque JavaScript extrêmement populaire créée par Alvaro Trigo. Cela nous permet de créer de magnifiques sites Web et applications avec défilement d'une page.. 

Bien qu'elle soit considérée comme une bibliothèque JavaScript sans dépendance, elle peut également être utilisée comme un plugin jQuery, tout comme sa version précédente (v2).. 

alvarotrigo.com/fullPage

Contrairement à la v2, cette nouvelle version est gratuite sous certaines conditions. Une licence est requise non seulement pour les projets commerciaux, mais également pour tout projet non commercial qui n'est pas à source ouverte et compatible avec la licence GPLv3..

Il prend en charge les navigateurs et est livré avec une documentation détaillée. Vous trouverez une grande liste d’exemples de travail sur cette page..

Au-delà des fonctionnalités de base, il fournit des fonctionnalités supplémentaires payantes appelées extensions.. 

En raison de sa popularité, un thème WordPress ainsi que des wrappers pour différents frameworks JS (par exemple, Vue.js) a également été développé..

Débuter avec fullPage.js v3

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

  • fullpage.css ou sa version abrégée
  • fullpage.js ou sa version abrégée

Vous pouvez éventuellement importer easings.min.js ainsi que scrolloverflow.min.js.. 

Vous pouvez récupérer une copie des fichiers fullPage correspondants en visitant son dépôt Github, en utilisant un gestionnaire de packages (par exemple, npm) ou en chargeant les actifs nécessaires via un CDN (par exemple, cdnjs). Pour ce tutoriel, je vais choisir la dernière option et tout extraire dans CodePen.

Pour les besoins de ce tutoriel, au-delà des fichiers fullPage, j’ai également incorporé Babel.

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

Les paramètres CSS requisLes paramètres JavaScript requis

1. Le HTML

Pour donner le coup d'envoi, nous définirons un élément wrapper contenant toutes les sections. Chaque section reçoit le nécessaire section classe. Cette classe peut être personnalisée au cours du processus d’initialisation de la bibliothèque via le sectionSélecteur option de configuration. Tous les éléments de section sont enveloppés dans un .récipient élément.

Voici la structure HTML de base:

2. Le CSS

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

Tout d'abord, nous définissons deux propriétés personnalisées à l'aide de variables CSS:

: racine --main-white-color: blanc; --main-black-color: noir; 

Ensuite, nous allons spécifier les styles de nos sections:

.section arrière-plan: gradient linéaire (jusqu'en bas, # 7f2a8b 20%, # a336b2 70%, # b43dc4);  .section: last-child background: # 7b2987 url (IMG_SRC) no-repeat fixed center / cover; background-blend-mode: luminosité;  .section .container max-width: 750px; largeur: 85%; rembourrage: 15px; marge: 0 auto; text-align: center;  .section .box padding: 10px;  .section img display: block; largeur maximale: 80%; largeur: 500px; marge: 0 auto;  .section em font-size: 0.8rem;  .section a font-size: 2.5rem; rembourrage en bas: 1px; bord inférieur: solide 2px; texte-décoration: aucun; 

Enfin, nous définirons les règles responsables de l’animation du .boîte éléments (ils figurent dans les deuxième, troisième, quatrième et cinquième sections):

.section .box opacité: 0; transformation: scale3d (0, 0, 0) translate3d (0, -100%, 0);  .section .box.is-animated animation: fadeIn 0.5s avant-arrière avant-arrière;  @keyframes fadeIn 100% opacity: 1; transformation: scale3d (1, 1, 1) translate3d (0, 0, 0); 

Personnaliser l'apparence de la navigation

Il serait bien de personnaliser l'apparence de la navigation par points en fonction de nos besoins.

La partie gauche de la capture d'écran ci-dessous montre les styles par défaut, tandis que la partie droite montre les styles souhaités:

De plus, nous voulons encore une chose. Lors de la navigation vers la dernière section, comme nous utiliserons un fond d’image pâle, la couleur de la navigation par points devrait passer au noir, comme ceci:

Il y a deux façons de savoir quand la dernière section est visible. 

Tout d'abord, via CSS. La bibliothèque ajoute une classe de la forme fp-visualisation-SECTION-SLIDE au corps élément dépendant de la section / diapo active. 

Donc, comme nous avons six sections, lorsque nous quittons la cinquième section et visitons la dernière, la corps classe (à partir de fp-Viewing-0) sera comme suit: 

Cette méthode n'est pas parfaitement flexible. Par exemple, nous pourrions ajouter une règle qui change la couleur des points lorsque la sixième (dernière) section devient visible:

.fp-visualisation-5 # fp-nav ul li une étendue fond: var (- couleur-principale-noire);  

Mais ensuite, si nous ajoutons une septième section, nous devrons modifier la règle susmentionnée à celle-ci:

.fp-visualisation-6 # fp-navigation ul li une étendue fond: var (- couleur-principale-noire); 

La deuxième méthode utilise JavaScript (comme nous le verrons dans la section suivante) et nous donnera plus de flexibilité. Par notre propre instruction une coutume fp-last la classe sera ajoutée à la corps chaque fois que nous naviguons vers la dernière section.

Sous les hypothèses exposées ci-dessus, examinons les styles nécessaires à la personnalisation de l'aspect de la navigation par points:

# fp-nav ul li marge: 15px 7px;  # fp-nav ul li une étendue background: var (- main-white-color); bordure: 3px solide transparent; durée de transition: 0.5s;  # fp-nav ul li une étendue, # fp-nav ul li: survolez une étendue width: 12px; hauteur: 12px;  # fp-nav ul li une étendue, # fp-nav ul li: survoler une étendue, # fp-nav ul li étendue.active, # fp-nav ul li: survol a.active span marge: -9px 0 0 -9px;  # fp-nav ul li: survolez une étendue, # fp-nav ul li.active span background: transparent; couleur de bordure: var (- couleur principale blanche);  .fp-last # fp-nav ul li une étendue background: var (- main-black-color);  .fp-last # fp-nav ul li: survolez un intervalle, .fp-last # fp-nav ul li a.active span background: transparent; couleur de bordure: var (- couleur principale); 

Image avec modes de fusion CSS et centrage Flexbox

Notre dernière image est une image que j'ai téléchargée à partir d'Envato Elements. C'est une image en couleurs, mais grâce à certains CSS, nous pouvons appliquer un mode de fusion dans le navigateur qui mélange l'image avec un fond violet:

Le mode de fusion (luminosité) est appliqué comme suit:

.section: last-child background: # 7b2987 url (spirit.jpg) centre / cache fixe sans répétition; background-blend-mode: luminosité; 

Pour une meilleure compréhension du fonctionnement des modes de fusion CSS, consultez ces tutoriels:

3. Le JavaScript

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

Initialisation complète de la page 3

Dans un premier temps, nous allons initialiser fullPage avec les personnalisations suivantes:

  • Nous définissons la clé de licence comme OPEN-SOURCE-GPLV3-LICENSE. Si vous envisagez d'utiliser FullPage dans un projet commercial, vous devrez modifier cette valeur avec votre propre clé de licence..
  • Par défaut, la bibliothèque ne montre pas la navigation par points. Dans notre cas, il sera visible et positionné verticalement à gauche de la page.. 
  • Nous utilisons JavaScript au lieu des transformations CSS3 pour faire défiler les sections en définissant CSS3: faux. Nous faisons cela pour éviter un conflit qui survient dans certains navigateurs entre les éléments transformés et leurs éléments enfants à position fixe. Notre dernière section a une image de fond fixe.
  • Une barre de défilement apparaîtra au cas où le contenu de la section est plus grand que sa hauteur. Pour cette raison, nous avons mis scrollOverflow: true et charger le scrolloverflow.min.js bibliothèque.  
const fullPage = document.getElementById ("fullpage"); nouvelle page complète (fullPage, licenseKey: "OPEN-SOURCE-GPLV3-LICENSE", navigation: true, navigationPosition: "left", css3: false, scrollOverflow: true);

Travailler avec des événements de section

Dans notre projet, les choses suivantes devraient arriver:

  1. Chaque fois que nous accédons à une section, nous vérifions si cette section a un .boîte élément. Si tel est le cas, nous lui donnons la est animé classe.
  2. Chaque fois que nous quittons une section, nous vérifions si cette section a un .is-box.is-animated élément. Dans ce scénario, nous supprimons le est animé classe de celui-ci.
  3. Chaque fois que nous quittons une section, nous vérifions quelle est la section de destination. S'il s'agit de la dernière section, nous ajoutons le fp-last classe à la corps élément. Sinon, nous nous assurons que cette classe est supprimée.

Pour satisfaire aux exigences ci-dessus, nous tirons parti de la afterLoad et en congé événements.

le afterLoad l'événement est déclenché une fois qu'une section a été chargée, une fois le défilement terminé.

le en congé L'événement est déclenché lorsque l'utilisateur quitte une section, dans la transition vers la nouvelle section..

Voici l'initialisation résultante avec les événements susmentionnés: 

const body = document.querySelector ("body"); const fullPage = document.getElementById ("fullpage"); const boxes = document.querySelectorAll (". box"); nouvelle page entière (fullPage, licenseKey: "OPEN-SOURCE-GPLV3-LICENSE", navigation: true, navigationPosition: "left", css3: false, scrollOverflow: true, afterLoad: fonction (origine, destination, direction) const activeSection = destination.item; if (activeSection.querySelector (". box")) activeSection.querySelector (". box"). classList.add ("is-animated");, onLeave: function (origine, destination, direction) ) destination.isLast? body.classList.add ("fp-last"): body.classList.remove ("fp-last"); if (document.querySelector (". box.is-animated")) document .querySelector (". box.is-animated") .classList.remove ("is-animated");); 

Conclusion

Et nous avons fini! Dans ce tutoriel, nous avons abordé les bases de fullPage 3. Nous pourrions en discuter beaucoup plus et j'espère que la démo vous a suffisamment inspiré pour construire quelque chose de magnifique avec cette bibliothèque étonnante..

Si vous souhaitez voir plus de sujets avancés avec fullPage (je prévois quelque chose basé sur WordPress, fullPage et AJAX si cela vous intéresse?), Laissez-moi savoir dans les commentaires ci-dessous. Et n'oubliez pas de consulter https://www.glaad.org/spiritday pour montrer votre soutien aujourd'hui. Aller violet!

Lectures complémentaires

  • Astuce: faites défiler les animations avec fullPage.js et Animate.css