Что нужно добавить в слайдер
Подскажите, пожалуйста, что нужно добавить в код, чтобы если я использую слайдер в нескольких div-ах картинки не зависели друг от друга(чтобы при прокрутке в другом блоке не крутились). С JS опыта не очень много поэтому не до конца понимаю что нужно добавить. Прилагаю код ниже. За любой ответ заранее спасибо.
let slideIndex = 1
showSlides(slideIndex)
function nextSlide(){
showSlides(slideIndex += 1)
}
function previousSlide(){
showSlides(slideIndex -= 1)
}
function showSlides(n){
let slides = document.getElementsByClassName('item')
if(n > slides.length) {
slideIndex = 1
}
if(n < 1){
slideIndex = slides.length
}
for(let slide of slides){
slide.style.display = 'none'
}
slides[slideIndex - 1].style.display = 'block'
}
.slider{
box-shadow: 0 15px 30px 0 rgba(0,0,0, 0.1);
max-width: 50%;
position: relative;
margin: auto;
height: 300px;
padding-bottom: 20px;
}
.slider .item img {
object-fit: cover;
width: 100%;
height: 300px;
border-radius: 10px;
box-shadow: 0 15px 30px 0 rgba(0,0,0, 0.1);
}
.slider .previous, .slider .next {
cursor: pointer;
position: absolute;
top: 50%;
width: auto;
margin-top: -22px;
padding: 16px;
color: white;
font-weight: bold;
font-size: 16px;
transition: 0.6s ease;
border-radius: 0 3px 3px 0;
}
.slider .next {
right: 0px;
border-radius: 3px 0 0 3px;
}
.slider .previous:hover,
.slider .next:hover {
background-color: rgba(0, 0, 0, 0.2);
}
.slider .item {
animation-name: fade;
animation-duration: 1.5s;
}
<script src="https://kit.fontawesome.com/a04dc06e4b.js"></script>
<div class="slider">
<div class="item">
<img src="https://s1.1zoom.ru/big3/256/359188-svetik.jpg">
</div>
<div class="item">
<img src="https://img2.goodfon.ru/wallpaper/nbig/5/27/chile-patagonia-nature.jpg">
</div>
<a class="previous" onclick="previousSlide()"><i class="fas fa-chevron-left"></i></a>
<a class="next" onclick="nextSlide()"><i class="fas fa-chevron-right"></i></a>
</div>
<div class="slider">
<div class="item">
<img src="https://get.wallhere.com/photo/2560x1600-px-ancient-architecture-castle-field-forest-Germany-hill-Hohenzollern-landscape-nature-sky-tower-trees-x-px-661906.jpg">
</div>
<a class="previous" onclick="previousSlide()"><i class="fas fa-chevron-left"></i></a>
<a class="next" onclick="nextSlide()"><i class="fas fa-chevron-right"></i></a>
</div>
Ответы (1 шт):
Автор решения: Stepan Kasyanenko
→ Ссылка
Можно сделать на классах.
class MySlider {
slideIndex = 1
constructor(container) {
this.container = container;
this.container.querySelector('.next').addEventListener('click', () => this.nextSlide());
this.container.querySelector('.previous').addEventListener('click', () => this.previousSlide());
}
nextSlide() {
this.showSlides(this.slideIndex += 1)
}
previousSlide() {
this.showSlides(this.slideIndex -= 1)
}
showSlides(n) {
let slides = this.container.getElementsByClassName('item')
if (n > slides.length) {
this.slideIndex = 1
}
if (n < 1) {
this.slideIndex = slides.length
}
for (let slide of slides) {
slide.style.display = 'none'
}
slides[this.slideIndex - 1].style.display = 'block'
}
}
document.querySelectorAll('.slider').forEach(slider => {
const mySlider = new MySlider(slider);
mySlider.showSlides(1);
});
.slider {
box-shadow: 0 15px 30px 0 rgba(0, 0, 0, 0.1);
max-width: 50%;
position: relative;
margin: auto;
height: 300px;
padding-bottom: 20px;
}
.slider .item img {
object-fit: cover;
width: 100%;
height: 300px;
border-radius: 10px;
box-shadow: 0 15px 30px 0 rgba(0, 0, 0, 0.1);
}
.slider .previous,
.slider .next {
cursor: pointer;
position: absolute;
top: 50%;
width: auto;
margin-top: -22px;
padding: 16px;
color: white;
font-weight: bold;
font-size: 16px;
transition: 0.6s ease;
border-radius: 0 3px 3px 0;
}
.slider .next {
right: 0px;
border-radius: 3px 0 0 3px;
}
.slider .previous:hover,
.slider .next:hover {
background-color: rgba(0, 0, 0, 0.2);
}
.slider .item {
animation-name: fade;
animation-duration: 1.5s;
}
<script src="https://kit.fontawesome.com/a04dc06e4b.js"></script>
<div class="slider">
<div class="item">
<img src="https://s1.1zoom.ru/big3/256/359188-svetik.jpg">
</div>
<div class="item">
<img src="https://img2.goodfon.ru/wallpaper/nbig/5/27/chile-patagonia-nature.jpg">
</div>
<a class="previous"><i class="fas fa-chevron-left"></i></a>
<a class="next"><i class="fas fa-chevron-right"></i></a>
</div>
<div class="slider">
<div class="item">
<img src="https://get.wallhere.com/photo/2560x1600-px-ancient-architecture-castle-field-forest-Germany-hill-Hohenzollern-landscape-nature-sky-tower-trees-x-px-661906.jpg">
</div>
<div class="item">
<img src="https://img2.goodfon.ru/wallpaper/nbig/5/27/chile-patagonia-nature.jpg">
</div>
<a class="previous"><i class="fas fa-chevron-left"></i></a>
<a class="next"><i class="fas fa-chevron-right"></i></a>
</div>