@Dmitry2307

Автослайдер на JavaScript. Где ошибка в слайдере?

При нажатии кнопок слайдера (next / prev), функция setTimeout - начинает работать не корректно. Заданное время для функции сбивается. Сами слайды перелистываются через один.

var slideIndex = 0;
showSlides(slideIndex);
function plusSlide() {
    showSlides(slideIndex += 1);  
}
function minusSlide() {
    showSlides(slideIndex - 1); 
}
function currentSlide(n) {
    showSlides(slideIndex = n);
}

function showSlides(n) {
    var i;
    var slides = document.getElementsByClassName("mySlides");
    var dots = document.getElementsByClassName("dot");
    var time = 5000;

    if (n > slides.length) {
      slideIndex = 1
    }
    if (n < 1) {
        slideIndex = slides.length
    }
    for (i = 0; i < slides.length; i++) {
        slides[i].style.display = "none";
    }
    for (i = 0; i < dots.length; i++) {
        dots[i].className = dots[i].className.replace(" active_slide", "");
    }

    slideIndex++;
    if (slideIndex < 1) {slideIndex = slides.length};
    if (slideIndex > slides.length) {slideIndex = 1};

    slides[slideIndex - 1].style.display = "block";
    dots[slideIndex - 1].className += " active_slide", "";
    setTimeout(showSlides, time); // Change image every 5 seconds  
};
  • Вопрос задан
  • 56 просмотров
Решения вопроса 1
AlexanderK-A
@AlexanderK-A
Изучаю ES dev, ищу работу, 36, UTC+10
Доброго дня!

Бросилось в глаза вот это (в паре мест):
if (n > slides.length) {
slideIndex = 1
}
if (n < 1) {
slideIndex = slides.length
}


В JavaScript допустимые индексы массива - от 0 до someArray.length-1 включительно.

Может в этом дело?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Александрия Москва
от 200 000 до 250 000 руб.
Foodtronics Москва
от 100 000 до 200 000 руб.
от 5 500 до 6 500 usd.
20 авг. 2019, в 13:14
8000 руб./за проект
20 авг. 2019, в 13:02
100000 руб./за проект
20 авг. 2019, в 12:42
7000 руб./за проект