@petrro

Что делают эти строки в коде?

Есть код слайдера изображений:
let slideIndex = 0;

function plusSlides(n) {
  slideIndex = (slideIndex + slides.length + n) % slides.length;        //строка №1 
  showSlides();
}

function currentSlide(n) {
  slideIndex = n % slides.length;    //строка №2
  showSlides();
}

const slides = [...document.getElementsByClassName("image")];

function showSlides() {
  slides.forEach((slide,i) => slide.style.display = i === slideIndex ? "block" : "none");
 
}

setInterval(() => plusSlides(1), 3000);


Не могу понять закоментирование строки.
Я понимаю что %- это оператор остаток от деления, slides -переменная, и т.д. Но я не могу в целом обьяснить что код в этих строках делает. Зачем там остаток от деления? Зачем в скобках все подряд добавляется друг к другу. Какая то криптография получается а не код. Подскажите пожалуйста.
  • Вопрос задан
  • 302 просмотра
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
Допустим, есть всего 10 слайдов.

  • Производится попытка установить в качестве текущего слайд номер 14. Что делать? Очевидно, установить в качестве текущего четвёртый - остаток от деления изначально указанного номера на количество слайдов.
  • Как установить минус второй (-2) слайд? - очевидно, это второй с конца, надо добавить количество слайдов, чтобы получить реальный номер.
  • Зачем одновременно добавляется количество слайдов и берётся остаток? - чтобы один и тот же код корректно обрабатывал переходы из конца в начало и из начала в конец.
Ответ написан
lastuniverse
@lastuniverse
Всегда вокруг да около IT тем
Эту строчку можно упростить
Заменив
slideIndex = (slideIndex + slides.length + n) % slides.length;

На
slideIndex = (slideIndex + n) % slides.length;

Про упрощение обманул, как заметил 0xD34F в своем ответе добавление slides.length нужно для приведения номера слайда к легитимному диапазону в случае если он отрицательный.

Сама строка просто перелистывает на n слайдов вперед. Делается это так:
К номеру текущего слайда добавляется число слайдов на которые надо перескочить вперед а затем, на случай если полученный новый номер текущего слайда больше числа слайдов находим остаток от деления полученного номера на общее число слайдов

В этой строчке

slideIndex = n % slides.length;
Просто выставляется новый номер текущего слайда а на случай если он больше числа слайдов находим остаток от его деления на общее число слайдов
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы