@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  
};
  • Вопрос задан
  • 94 просмотра
Решения вопроса 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 включительно.

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

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

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