Subscribe to get the weekly post

Or

Follow me

Slider plein-écran avec HTML, CSS et JavaScript

Publié 3 months ago 6 min de lecture

Dans cet article, nous allons construire un Slider plein écran en utilisant HTML, CSS et JavaScript.

Vous pouvez le voir en direct ici

HTML

Comme vous pouvez le voir, nous commençons par tout emballer dans la balise main.

<main>
  <div class="slider">
    <div class="slider--content">
      <button class="slider__btn-left">
        <i class="fas fa-angle-left"></i>
      </button>
      <div class="slider--feature">
        <h1 class="slider--title">Tasty</h1>
        <p class="slider--text"></p>
        <button class="slider--btn">Get started</button>
      </div>
      <button class="slider__btn-right">
        <i class="fas fa-angle-right"></i>
      </button>
    </div>
  </div>
</main>

Ensuite, on maintient les éléments du Slider dans la classe .slider. Nous aurons également besoin de deux boutons pour pouvoir passer à la diapositive suivante ou précédente. Le .slider - feature contiendra le titre et la description des éléments de la diapositive.
A noter que j'utilise Font Awesome pour les icônes, vous devrez donc créer un compte ici puis ajoutez le lien dans la balise head.

CSS

Comme d'habitude, nous démarrons le CSS en effectuant quelques réinitialisations.

@import url("https://fonts.googleapis.com/css?family=Open+Sans:400,700&display=swap");
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  height: 100vh;
  width: 100%;
  font-family: "Open Sans", sans-serif;
  background: #444;
}

Ensuite, on change l'arrière-plan, la famille de polices et on importe la police Open Sans à partir des polices google.

.slider {
  background-position: center;
  background-repeat: no-repeat;
  background-size: cover;
  height: 100vh;
  width: 100%;
}

.slider--content {
  display: flex;
  justify-content: space-between;
  align-items: center;
  height: 100vh;
}

.slider--feature {
  text-align: center;
}

.slider--title {
  font-size: 2.5rem;
  color: #fff;
  text-transform: uppercase;
  font-weight: 700;
}

.slider--text {
  font-size: 1rem;
  color: #fff;
  text-transform: uppercase;
  margin: 0.5rem 0;
}

Ensuite, nous utilisons la classe .slider pour créer l'élément de diapositive en utilisant toute la largeur et la hauteur de la fenêtre et le préparer pour recevoir l'image plus tard comme arrière-plan à l'aide de javaScript.
Ensuite, on définit display: flex et justify-content: space-between sur la classe .slider-content pour distribuer équitablement les éléments suivant l'espace disponible.

.slider__btn-right,
.slider__btn-left {
  background: transparent;
  border: none;
  outline: none;
  font-size: 4rem;
  color: #eee;
  padding: 0 1rem;
  cursor: pointer;
  transition: transform 0.1s ease-in-out;
}

.slider--btn {
  background: #fff;
  text-transform: uppercase;
  border: none;
  color: #444;
  border: 1px solid #444;
  outline: none;
  font-weight: 700;
  padding: 0.8rem 2rem;
  cursor: pointer;
}

.slider__btn-left:hover,
.slider__btn-right:hover {
  transform: scale(0.95);
}

Comme vous pouvez le voir, ce bloc de code est utilisé pour styliser les boutons. Les classes .slider__btn-right et.slider__btn-left nous aident à styliser les boutons gauche et droit de la diapositive. Nous utilisons également transition: transform 0.1s easy-in-out pour faire un petit effet d'échelle en survol avec transform: scale (0.95). Et la classe .slider - btn est appliquée au bouton d'appel à l'action pour avoir un style agréable.

@keyframes fadeIn {
  0% {
    opacity: 0;
  }
  100% {
    opacity: 1;
  }
}
.fadeIn {
  animation: fadeIn 1s;
}

Ici, nous utilisons @keyframes pour appliquer un fondu d'animation à l'élément de diapositive. Et la classe .fadeIn sera ajoutée dynamiquement à la diapositive lorsqu'un changement se produit.

JavaScript

Comme d'habitude, nous commençons la partie JavaScript en sélectionnant les éléments nécessaires.

const slideContainer = document.querySelector(".slider")
const sliderText = document.querySelector(".slider--text")
const btnLeft = document.querySelector(".slider__btn-left")
const btnRight = document.querySelector(".slider__btn-right")

const sliderImages = [
  {
    src: "https://drive.google.com/uc?id=1BzhhKeOc9XyZMPXnZAi_JiOYdZrwLYu-",
    text: "Taste the magic",
  },
  {
    src: "https://drive.google.com/uc?id=1M1TR1HjJCj-TuOa54jzty8QK9QUdNfSC",
    text: "Taste the incredible",
  },
  {
    src: "https://drive.google.com/uc?id=1twyebwsDDBtPiyFHxTIf9P26sDGiq5Qi",
    text: "Taste the dream",
  },
]

let slideCounter = 0

Ensuite, nous créons un tableau d'images qui sera utilisé comme image de fond pour la diapositive. Et aussi, on déclare la variable slideCounter pour pouvoir compter le nombre de diapositives.

const startSlider = () => {
  slideContainer.style.backgroundImage = `linear-gradient(
      to right,
      rgba(34, 34, 34, 0.4),
      rgba(68, 68, 68, 0.4)
    ), url(${sliderImages[0].src})`
  sliderText.innerHTML = sliderImages[0].text
}

La fonction startSlider() mettra la première image du tableau sliderImages en arrière-plan de la diapositive. Je stylise également l'arrière-plan avec linear-gradient() pour assombrir un peu l'image, et enfin ajouter le texte adéquat à l'élément de la diapositive.

btnRight.addEventListener("click", function() {
  if (slideCounter === sliderImages.length - 1) {
    slideContainer.style.backgroundImage = `linear-gradient(
      to right,
      rgba(34, 34, 34, 0.4),
      rgba(68, 68, 68, 0.4)
    ), url(${sliderImages[0].src})`
    sliderText.innerHTML = sliderImages[0].text
    slideCounter = -1

    slideContainer.classList.add("fadeIn")
    setTimeout(() => {
      slideContainer.classList.remove("fadeIn")
    }, 1000)
  }
  slideContainer.style.backgroundImage = `linear-gradient(
      to right,
      rgba(34, 34, 34, 0.4),
      rgba(68, 68, 68, 0.4)
      ),url(${sliderImages[slideCounter + 1].src})`
  sliderText.innerHTML = sliderImages[slideCounter + 1].text
  slideCounter++
  slideContainer.classList.add("fadeIn")
  setTimeout(() => {
    slideContainer.classList.remove("fadeIn")
  }, 1000)
})

Ici, nous écoutons un événement de clic sur le bouton droit de la diapositive. Ensuite, nous vérifions si le compteur (slideCounter) est égal à la dernière diapositive. Si c'est le cas, on redémarre la diapositive avec la première image et le premier texte du tableau. Ensuite, on ajoute la classe fadeIn pour animer la diapositive à l'entrée.
Ensuite, si le compteur (slideCounter) n'est pas égal à la dernière diapositive, nous pouvons définir la diapositive suivante avec les données appropriées et on incrémente la variable slideCounter et enfin on supprime l'animation après 1 seconde pour pouvoir l'animer à nouveau.

btnLeft.addEventListener("click", function() {
  if (slideCounter === 0) {
    slideContainer.style.backgroundImage = `linear-gradient(
      to right,
      rgba(34, 34, 34, 0.4),
      rgba(68, 68, 68, 0.4)
    ),url(${sliderImages[sliderImages.length - 1].src})`
    sliderText.innerHTML = sliderImages[sliderImages.length - 1].text
    slideCounter = sliderImages.length
    slideContainer.classList.add("fadeIn")
    setTimeout(() => {
      slideContainer.classList.remove("fadeIn")
    }, 1000)
  }

  slideContainer.style.backgroundImage = `linear-gradient(
      to right,
      rgba(34, 34, 34, 0.4),
      rgba(68, 68, 68, 0.4)
    ),url(${sliderImages[slideCounter - 1].src})`
  sliderText.innerHTML = sliderImages[slideCounter - 1].text
  slideCounter--
  slideContainer.classList.add("fadeIn")
  setTimeout(() => {
    slideContainer.classList.remove("fadeIn")
  }, 1000)
})

startSlider()

Comme vous pouvez le voir ici, nous utilisons le même processus pour changer la diapositive avec le bouton gauche sauf le fait que nous vérifions si le compteur est égal à zéro. Et si c'est le cas, on passe à la dernière diapositive. Sinon, on passe à la diapositive précédente et on décrémente la variable compteur.
Et enfin, on démarre le curseur avec la fonction startSlider ().
Vous pouvez le voir en direct ici
fullscreen-slider

Posted by Ibrahima Ndaw

Full-stack developer and blogger
Follow me

Get the next in your inbox