Что нужно добавить в слайдер

Подскажите, пожалуйста, что нужно добавить в код, чтобы если я использую слайдер в нескольких 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>

→ Ссылка