Реализация мини слайдера — почему в одном случае стрелка работает правильно, а в другом нет?

121
26 марта 2022, 15:10

Всем привет В общем, я делаю свой мини слайдер, и на этом моменте я просто застрял, не понимаю в чем ошибка

Дело в том, что при нажатии на кнопку назад, слайдер меняет активный элемент, вот его код

$(".meal-small-slider-arrow--prev").on('click', function(){
            $(".meal-small-slider__item").each(function(i,v){
                if($(this).hasClass("meal-small-slider__item--is-active")){
                    if(i == 0){
                        return true;
                    }else{
                        let new_index = i - 1;
                        $(`.meal-small-slider__item`).removeClass("meal-small-slider__item--is-active")
                        $(`.meal-small-slider__item:eq(${new_index})`).addClass("meal-small-slider__item--is-active")
                    }
                }
            })
        })

А когда я пишу тот же код, только чтобы кнопка "вперед" работала также, т.е. при нажатии вперед, отслеживается индекс элемента, увеличивается, и к нему присвается активный класс, то здесь инкремент не срабатывает никак. Проводил тест в консоли, если инкремент стоит, то он выводит сразу все индексы начиная от текущего, а если убрать инкремент, оставить просто присваивание, то выводит один индекс.

$(".meal-small-slider-arrow--next").on('click', function(){
            $(".meal-small-slider__item").each(function(i,v){
                if($(this).hasClass("meal-small-slider__item--is-active")){
                    if(i == 4){
                        return true;
                    }else{
                        console.log(i)
                        let new_index = ++i;
                        $(`.meal-small-slider__item`).removeClass("meal-small-slider__item--is-active")
                        $(`.meal-small-slider__item:eq(${new_index})`).addClass("meal-small-slider__item--is-active")
                    }
                }
            })
        })

Пожалуйста, помогите, я уже замучался:) Cпасибо

Answer 1

Решением оказалось остановка выполнения условия через return false

$(".meal-small-slider-arrow--next").on('click', function(){
        $(".meal-small-slider__item").each(function(i,v){
            if($(this).hasClass("meal-small-slider__item--is-active")){
                if(i == 4){
                    return true;
                }else{
                    console.log(i)
                    let new_index = ++i;
                    $(`.meal-small-slider__item`).removeClass("meal-small-slider__item--is-active")
                    $(`.meal-small-slider__item:eq(${new_index})`).addClass("meal-small-slider__item--is-active")
                    return false;
                }
            }
        })
    })
READ ALSO
Максимальное значение setinterval и как его обойти

Максимальное значение setinterval и как его обойти

использую setinterval и тут у меня возник один вопросКак я понял, максимальное значение - 2147483647, если указать 2147483648, то код будет выполняться сразу

136
Multiple Select2 связанные option

Multiple Select2 связанные option

поставили мне задачу, в которой я не разбирался никогда ранее, было бы не плохо, если бы кто-нибудь смог помочь

203
Как передать данные из одного компонента в другой?

Как передать данные из одного компонента в другой?

Есть код, который выводит посты и по клику на пост показывает его полное содержимое

145
Вызвать событие "Click"

Вызвать событие "Click"

Я разрабатываю расширения, которые добавляют код js в сторонний сервис и автоматически заполняют форму для клиента

96