var gallery = document.getElementsByClassName('gallery')[0];
var images = gallery.getElementsByClassName("gallery-img");
var currentIndex = -1;
var timeoutMs = 3000;
gallery.getElementsByClassName('gallery-btn-prev')[0].addEventListener('click', prevSlide);
gallery.getElementsByClassName('gallery-btn-next')[0].addEventListener('click', nextSlide);
initializeAndRunSlider(gallery);
function initializeAndRunSlider(gallery) {
nextSlide();
setTimeout(initializeAndRunSlider.bind(null, gallery), timeoutMs);
}
function prevSlide(e) {
currentIndex = mod(currentIndex - 1, images.length);
displayCurrentImage();
}
function nextSlide(e) {
currentIndex = mod(currentIndex + 1, images.length);
displayCurrentImage();
}
function displayCurrentImage() {
hideAllImages(images);
showImage(images, currentIndex);
}
function hideAllImages(images) {
for (var i = 0; i < images.length; i++) {
removeClass(images[i], 'visible');
addClass(images[i], 'hidden');
}
}
function showImage(images, index) {
removeClass(images[index], 'hidden');
addClass(images[index], 'visible');
}
function mod(m, n) {
return (m + n) % n;
}
function addClass(el, className) {
if (el.classList) el.classList.add(className);
else el.className += ' ' + className;
}
function removeClass(el, className) {
if (el.classList) el.classList.remove(className);
else el.className = el.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' ');
}
function hasClass(el, className) {
if (el.classList) el.classList.contains(className);
else new RegExp('(^|)' + className + '(|$)', 'gi').test(el.className);
}
.gallery {
position: relative;
}
.gallery-images {
position: relative;
}
.gallery-img {
position: absolute;
top: 0;
width: 100%;
-webkit-user-select: none; /* Chrome/Safari */
-moz-user-select: none; /* Firefox */
-ms-user-select: none; /* IE10+ */
-o-user-select: none;
user-select: none;
}
.gallery-controls {
position: absolute;
top: 50vh;
width: 100%;
z-index: 100;
}
.gallery-btn {
font-size: 3em;
opacity: 0.25;
cursor: pointer;
}
.gallery-btn:hover {
opacity: 0.75;
}
.gallery-btn-prev { float: left; }
.gallery-btn-prev:before { content: "◄"; }
.gallery-btn-next { float: right; }
.gallery-btn-next:before { content: "►"; }
/* https://fvsch.com/code/transition-fade/test5.html */
.visible {
visibility: visible;
opacity: 1;
transition: opacity 2s linear;
}
.hidden {
visibility: hidden;
opacity: 0;
transition: visibility 0s 1s, opacity 1s linear;
}
<div class="gallery">
<div class="gallery-images">
<img class="gallery-img visible" src="http://placehold.it/128x48/7ff/700?text=First">
<img class="gallery-img" src="http://placehold.it/128x48/ff7/007?text=Second">
<img class="gallery-img" src="http://placehold.it/128x48/f7f/070?text=Third">
</div>
<div class="gallery-controls">
<div class="gallery-btn gallery-btn-prev"></div>
<div class="gallery-btn gallery-btn-next"></div>
</div>
</div>
Merci qui fonctionne, mais pourquoi faut-il arrêter de travailler lorsque je tente de mettre le bouton sous la galerie? et quand je clique sur le bouton il change l'image 2 fois – Cassy
Le bouton a cessé de fonctionner parce que j'ai placé la 'position' des images de la galerie pour être 'absolu' donc le bouton était en dessous de la galère qui est maintenant fixé en introduisant la hauteur et la largeur le div parent de la galerie. Il change deux fois lorsque vous cliquez sur le bouton car vous l'avez déclenché une fois et l'autre est déclenché par la fonction setInterval. – acesmndr
merci beaucoup, pouvez-vous me dire une chose de plus je ne comprends vraiment pas pourquoi j'ai une barre de défilement au bas du navigateur maintenant si je définir la galerie pour être largeur 100% ne signifie pas qu'il utilise le toute la fenêtre et pas plus? – Cassy