Остановка цикла на панели выполнения

#javascript #html #jquery #css

#javascript #HTML #jquery #css — код

Вопрос:

Я работаю с этой панелью прогресса: https://codepen.io/thegamehasnoname/pen/JewZrm

Проблема, с которой я сталкиваюсь, заключается в том, что это циклы, и то, чего я хочу достичь, это:

  • остановка на последнем слайде прогресса (остановка цикла).
  • если пользователь находится на последнем слайде панели прогресса после его остановки, и я нажимаю на .button-prev кнопку, он должен начинаться с предыдущего слайда, а не с первого слайда панели прогресса.

вот код:

 // swiper custom progressbar
const progressContainer = document.querySelector('.progress-container');
const progress = Array.from(document.querySelectorAll('.progress'));
const status = document.querySelector('.status');

const playNext = (e) => {
  const current = e amp;amp; e.target;
  let next;

  if (current) {
    const currentIndex = progress.indexOf(current);
    if (currentIndex < progress.length) {
      next = progress[currentIndex 1];
    }
    current.classList.remove('active');
    current.classList.add('passed');
  }

  if (!next) {
    progress.map((el) => {
      el.classList.remove('active');
      el.classList.remove('passed');
    })
    next = progress[0];
  }
  next.classList.add('active');
}

progress.map(el => el.addEventListener("animationend", playNext, false));

playNext();
 

Я попытался добавить это:

 if (current) {
   if (!next) {
     $('.progress-container div').addClass('passed');
   }
}
 

Но класс passed удаляется, и панель прогресса запускается снова.

Это js из previous button того, что у меня есть:

 $(document).on('click', ".button-prev", function() {
  $('.progress-container div.active').prev().removeClass('passed').addClass('active');
  $('.progress-container div.active').next().removeClass('active');
});
 

есть идеи о том, как этого добиться?

Ответ №1:

У вас почти есть исправление! Просто добавьте оператор return, чтобы избежать установки активных calss на первый элемент прогресса.

 if (current) {
    const currentIndex = progress.indexOf(current);
    if (currentIndex < progress.length) {
      next = progress[currentIndex 1];
    }
    current.classList.remove('active');
    current.classList.add('passed');
    
    if (!next) {
     $('.progress-container div').addClass('passed');
      return;
   }
  }