@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 -переменная, и т.д. Но я не могу в целом обьяснить что код в этих строках делает. Зачем там остаток от деления? Зачем в скобках все подряд добавляется друг к другу. Какая то криптография получается а не код. Подскажите пожалуйста.
  • Вопрос задан
  • 323 просмотра
Решения вопроса 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;
Просто выставляется новый номер текущего слайда а на случай если он больше числа слайдов находим остаток от его деления на общее число слайдов
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы