Есть слайдер с картинками:
<div class="product-cards__slider slider slider--catalog">
<div class="slider__wrap slider__wrap--catalog">
<div class="slider__item slider__item--active">
<picture>
<source media="(min-width: 1440px)" srcset="img/slider/slider-img-graf-1-desktop-1.jpg">
<img src="img/slider/slider-img-graf-1-mobile-1.jpg" alt="Пергола Граф 1">
</picture>
</div>
<div class="slider__item">
<picture>
<source media="(min-width: 1440px)" srcset="img/slider/slider-img-graf-1-desktop-2.jpg">
<img src="img/slider/slider-img-graf-1-mobile-2.jpg" alt="Пергола Граф 1">
</picture>
</div>
<div class="slider__item">
<picture>
<source media="(min-width: 1440px)" srcset="img/slider/slider-img-graf-1-desktop-3.jpg">
<img src="img/slider/slider-img-graf-1-mobile-3.jpg" alt="Пергола Граф 1">
</picture>
</div>
</div>
<button class="slider__btn slider__btn--prev slider__btn--catalog">Предыдущий слайд</button>
<button class="slider__btn slider__btn--next slider__btn--catalog">Следующий слайд</button>
</div>
И есть его js реализация:
const btnPrevSlide = document.querySelector(".slider__btn--prev");
const btnNextSlide = document.querySelector(".slider__btn--next");
const slides = [... document.querySelectorAll(".slider__item")];
btnNextSlide.addEventListener("click", () => {
slides.forEach((element) => {
element.classList.remove("slider__item--active")
})
slides.push(slides.shift());
slides[0].classList.add("slider__item--active");
})
btnPrevSlide.addEventListener("click", () => {
slides.forEach((element) => {
element.classList.remove("slider__item--active")
})
slides.unshift(slides.pop());
slides[0].classList.add("slider__item--active");
})
Этот код работает когда один слайдер на странице. Если слайдеров несколько начинается бардак.
Я попробовал переписать код таким образом, чтобы найти таргетный слайдер и его кнопку и на нем вызвать функцию смены слайдов. Но кнопка срабатывает только один раз и я не могу понять почему?
const nextSlide = (arr) => {
arr.forEach((element) => {
element.classList.remove("slider__item--active")
})
arr.push(arr.shift());
arr[0].classList.add("slider__item--active");
}
document.addEventListener("click", (evt) => {
const target = evt.target;
const slider = target.parentNode
if (target.classList.contains("slider__btn--next")) {
nextSlide([... slider.querySelectorAll(".slider__item")])
}
})