JSFiddle - React, Tailwind, and code Playground
by Jordan Sayner
HTML
<button id="initialize-sliders">Initialize Sliders</button>
<div class="slider">
<div class="slides">
<div class="slide" style="background-color: #ff6347;">Slide 1</div>
<div class="slide" style="background-color: #4682b4;">Slide 2</div>
<div class="slide" style="background-color: #32cd32;">Slide 3</div>
</div>
<button class="prev">❮</button>
<button class="next">❯</button>
</div>
<div class="slider">
<div class="slides">
<div class="slide" style="background-color: #ffa500;">Slide 1</div>
<div class="slide" style="background-color: #800080;">Slide 2</div>
<div class="slide" style="background-color: #00ced1;">Slide 3</div>
</div>
<button class="prev">❮</button>
<button class="next">❯</button>
</div>
CSS
body {
font-family: Arial, sans-serif;
display: flex;
flex-direction: column;
align-items: center;
gap: 20px;
margin: 0;
padding: 20px;
background-color: #f0f0f0;
}
button#initialize-sliders {
padding: 10px 20px;
font-size: 16px;
cursor: pointer;
margin-bottom: 20px;
}
.slider {
position: relative;
width: 80%;
max-width: 600px;
overflow: hidden;
border-radius: 10px;
box-shadow: 0 4px 10px rgba(0,0,0,0.1);
}
.slides {
display: flex;
transition: transform 0.5s ease-in-out;
}
.slide {
min-width: 100%;
padding: 40px;
box-sizing: border-box;
color: white;
text-align: center;
font-size: 24px;
}
button.prev, button.next {
position: absolute;
top: 50%;
transform: translateY(-50%);
background-color: rgba(0,0,0,0.5);
color: white;
border: none;
padding: 10px;
cursor: pointer;
z-index: 1000;
}
button.prev {
left: 10px;
}
button.next {
right: 10px;
}
button.prev:hover, button.next:hover {
background-color: rgba(0,0,0,0.8);
}
JavaScript
document.addEventListener('DOMContentLoaded', () => {
let sliderInstances = [];
const initializeSliders = () => {
// Clear existing slider instances
sliderInstances.forEach(instance => {
window.removeEventListener('resize', instance.handleResize);
instance.nextButton.removeEventListener('click', instance.nextClick);
instance.prevButton.removeEventListener('click', instance.prevClick);
});
sliderInstances = [];
const sliders = document.querySelectorAll('.slider');
sliders.forEach(slider => {
const slides = slider.querySelector('.slides');
const slideCount = slider.querySelectorAll('.slide').length;
let currentIndex = 0;
const updateSlidePosition = () => {
slides.style.transform = `translateX(-${currentIndex * 100}%)`;
};
const handleResize = () => {
updateSlidePosition();
};
const nextButton = slider.querySelector('.next');
const prevButton = slider.querySelector('.prev');
const nextClick = () => {
currentIndex = (currentIndex + 1) % slideCount;
updateSlidePosition();
};
const prevClick = () => {
currentIndex = (currentIndex - 1 + slideCount) % slideCount;
updateSlidePosition();
};
window.addEventListener('resize', handleResize);
nextButton.addEventListener('click', nextClick);
prevButton.addEventListener('click', prevClick);
// Store instance details
sliderInstances.push({
handleResize,
nextButton,
nextClick,
prevButton,
prevClick
});
});
};
document.getElementById('initialize-sliders').addEventListener('click', initializeSliders);
});