Bonjour, je suis étudiante en developpement web, et je débute. Je dois faire un slider (en codant avec du html, css et js). Malheureusement, ca fait 3 jours que je suis dessus, j'ai chercher partout sur le net..pas moyen donc je désespere vraiment. voila un des codes que j'ai essayé (code trouvé sur internet) (je debute et je suis vraiment nulle en javascript). Je dois faire un slider sur wordpress. j'avais relié mon bout de code js à un functions.php (info trouvé sur internet). Merci de votre précieuse aide, je ne m'en sors pas.

<!-- Slideshow container -->
<div class="slideshow-container">

  <!-- Full-width images with number and caption text -->
  <div class="mySlides fade">
    <div class="numbertext">1 / 3</div>
    <img src="img1.jpg" style="width:100%">
    <div class="text">Caption Text</div>
  </div>

  <div class="mySlides fade">
    <div class="numbertext">2 / 3</div>
    <img src="img2.jpg" style="width:100%">
    <div class="text">Caption Two</div>
  </div>

  <div class="mySlides fade">
    <div class="numbertext">3 / 3</div>
    <img src="img3.jpg" style="width:100%">
    <div class="text">Caption Three</div>
  </div>

  <!-- Next and previous buttons -->
  <a class="prev" onclick="plusSlides(-1)">&#10094;</a>
  <a class="next" onclick="plusSlides(1)">&#10095;</a>
</div>
<br>

<!-- The dots/circles -->
<div style="text-align:center">
  <span class="dot" onclick="currentSlide(1)"></span>
  <span class="dot" onclick="currentSlide(2)"></span>
  <span class="dot" onclick="currentSlide(3)"></span>
</div>

* {box-sizing:border-box}

/* Slideshow container */
.slideshow-container {
  max-width: 1000px;
  position: relative;
  margin: auto;
}

/* Hide the images by default */
.mySlides {
  display: none;
}

/* Next & previous buttons */
.prev, .next {
  cursor: pointer;
  position: absolute;
  top: 50%;
  width: auto;
  margin-top: -22px;
  padding: 16px;
  color: white;
  font-weight: bold;
  font-size: 18px;
  transition: 0.6s ease;
  border-radius: 0 3px 3px 0;
  user-select: none;
}

/* Position the "next button" to the right */
.next {
  right: 0;
  border-radius: 3px 0 0 3px;
}

/* On hover, add a black background color with a little bit see-through */
.prev:hover, .next:hover {
  background-color: rgba(0,0,0,0.8);
}

/* Caption text */
.text {
  color: #f2f2f2;
  font-size: 15px;
  padding: 8px 12px;
  position: absolute;
  bottom: 8px;
  width: 100%;
  text-align: center;
}

/* Number text (1/3 etc) */
.numbertext {
  color: #f2f2f2;
  font-size: 12px;
  padding: 8px 12px;
  position: absolute;
  top: 0;
}

/* The dots/bullets/indicators */
.dot {
  cursor: pointer;
  height: 15px;
  width: 15px;
  margin: 0 2px;
  background-color: #bbb;
  border-radius: 50%;
  display: inline-block;
  transition: background-color 0.6s ease;
}

.active, .dot:hover {
  background-color: #717171;
}

/* Fading animation */
.fade {
  animation-name: fade;
  animation-duration: 1.5s;
}

@keyframes fade {
  from {opacity: .4}
  to {opacity: 1}
}

let slideIndex = 1;
showSlides(slideIndex);

// Next/previous controls
function plusSlides(n) {
  showSlides(slideIndex += n);
}

// Thumbnail image controls
function currentSlide(n) {
  showSlides(slideIndex = n);
}

function showSlides(n) {
  let i;
  let slides = document.getElementsByClassName("mySlides");
  let dots = document.getElementsByClassName("dot");
  if (n > slides.length) {slideIndex = 1}
  if (n < 1) {slideIndex = slides.length}
  for (i = 0; i < slides.length; i++) {
    slides[i].style.display = "none";
  }
  for (i = 0; i < dots.length; i++) {
    dots[i].className = dots[i].className.replace(" active", "");
  }
  slides[slideIndex-1].style.display = "block";
  dots[slideIndex-1].className += " active";
}

Ce que je veux

Je voulais partir sur un slider basique, avec des fleches mais on peut aussi faire un slider automatique, jusqu'a présent c'est avec un automatique que j'ai obtenus le "meilleur" resultat. Peu m'importe je veux juste qqch qui fonctionne (en utilisant css, html et js(jquery) obligatoirement). Peut etre que mon soucis est dans mon js, je ne sais pas ou le mettre j'ai suivi ce qu'internet m'a dis.

Ce que j'obtiens

j'obtiens un début de slider, mais tout se mets l'un en dessous de l'autre. Mes 3 images se suivent à la vertical et tout en dessous j'ai mes deux fleches l'une en dessous de l'autre.

3 réponses


Voici un slider simple que tu peut faire, si tu n'a pas de boutton prochain et précédent tu peut zapper le code qui leurs est destiné

let slides = document.getElementsByClassName("mySlides");
let nbr__slides = slides.length;

function enleverActivateSlides() {
    for (let i = 0; i < nbr__slides; i++) { slides[i].classList.remove('active'); }
}

// LES BOUTTONS SUIVANT ET PRECEDENT//

precedent.addEventListener('click', function() {
    etape--;
    if (etape < 0) {
        etape = nbr__slides - 1;
    }

    enleverActivateSlides();
    slides[etape].classList.add('active');

})

suivant.addEventListener('click', function() {
    etape++;
    if (etape >= nbr__slides) {
        etape = 0;
    }
    enleverActivateSlides();
    slides[etape].classList.add('active');

})

setInterval(function() {
    etape++;
    if (etape >= nbr__slides) {
        etape = 0;
    }
    enleverActivateSlides();
    slides[etape].classList.add('active');

}, 3000)

en supposant qu'un slide contenant la class active est un slide en display block et le contraire est un slide en display none.

julia22
Auteur

parfait merci beaucoup je test ca ce soir.
autre petite question si par hasard vous savez m'aiguiller.
Via wordpress, ou dois-je ajouter mon javascript? via un functions.php ou je peux le faire sur ma feuille de code html ? avec un lien specifique ?
merci beaucoup :)

Je t'en prie. Et n'oublie pas d'initialiser la variable etape à 0 j'ai oublié de le faire. et pour ta question j'aurai aimé te répondre mais je m'y connais pas en wordpress. Mais je peut t'assurer que ce n'est pas très sécurisé de mettre son code js directement dans du code html, je te conseille de le faire au moins via un lien.