Замена интервала на requestAnimationFrame для индикатора выполнения карусели Swiper

#javascript #jquery

Вопрос:

Хотя приведенный ниже код, добавляющий индикатор выполнения в «JS Swiper», хорошо работал в прошлом, я заметил, что в новом проекте, над которым я работаю, я получал мерцания в переходах, которые я проследил до индикатора выполнения.

Я хотел бы заменить «интервал» на «requestAnimationFrame», поскольку, исходя из понимания, индикатор выполнения будет работать с более высокой частотой кадров в секунду, что, я надеюсь, решит проблему с мерцанием, но, попытавшись реализовать это, индикатор выполнения не только останавливается при взаимодействии, но и увеличивается с каждым проходом.

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

 var duration = 3;
var interval = 5;
var progressBar = document.querySelector('.progress');

var mySwiper = new Swiper('.swiper-container', {
    loop: true,
    grabCursor: true,
    navigation: {
        nextEl: '.swiper-button-next',
        prevEl: '.swiper-button-prev',
    },
    pagination: {
        el: '.swiper-pagination',
        clickable: true,
    }
});

// Main Progress Bar Function

var percentTime, step, tick;

function startProgressbar() {
    resetProgressbar();
    percentTime = 0;
    isPaused = false;
    tick = window.setInterval(increase, interval);
}

function increase() {
    if (!isPaused) {
        step = duration * 1000 / interval;
        percentTime  = 100 / step;
        progressBar.style.width = percentTime   "%";
        if (percentTime >= 100) {
            mySwiper.slideNext();
            startProgressbar();
        }
    }
}

function resetProgressbar() {
    progressBar.style.width = 0   "%";
    clearTimeout(tick);
}

startProgressbar();

// Pause Control

var isPaused = false;

// Pause Carousel when it's Hovered Over

$('.swiper-container, .carousel-progress').mouseenter(function() {
    isPaused = true; // (Change 'true' to 'false' if not required)
});

$('.swiper-container, .carousel-progress').mouseleave(function() {
    isPaused = false;
});

// Reset Progress Bar on Slide Change

mySwiper.on('slideChange', function() {
    startProgressbar();
    isPaused = true; // (Change 'true' to 'false' if not required)
});
 

Комментарии:

1. Я только что создал ручку здесь: codepen.io/mikeyjn/pen/gOmqLjp Если бы кто — нибудь мог, пожалуйста, помочь мне с этим, я был бы очень благодарен, так как я уже несколько часов играю с этим и просто не могу понять- спасибо