kabuto
@kabuto
Веб-программист)

Непонятное поведение scroll event?

Это, казалось бы, простой код для прокрутки страницы. Но временами прокрутка не срабатывает, или останавливается. В чем причина такого поведения?

let ay = 1;
let vy = 5;
let scrollStarted = false;
let step = () => {
  // vy += ay;  
  scrollStarted = true;
  window.scrollBy(0, 5);
  window.requestAnimationFrame(step)
}

$(document).bind('DOMMouseScroll mousewheel', function(e, delta) {
  if(!scrollStarted){
    window.requestAnimationFrame(step)
  }
})


6623596f18ebf644895486.png
  • Вопрос задан
  • 54 просмотра
Пригласить эксперта
Ответы на вопрос 1
i229194964
@i229194964
Веб разработчик
let vy = 5;
let scrollStarted = false;
let userInteracting = false;

function step() {
    if (!userInteracting) {  // Продолжаем прокрутку, только если пользователь не взаимодействует
        window.scrollBy(0, vy);
        window.requestAnimationFrame(step);
    }
}

$(document).bind('DOMMouseScroll mousewheel', function(e) {
    userInteracting = true;  // Пользователь начал прокрутку
    clearTimeout(window.scrollTimeout);
    window.scrollTimeout = setTimeout(function() {
        userInteracting = false;  // Предполагаем, что пользователь закончил прокрутку после задержки
        if (!scrollStarted) {
            scrollStarted = true;
            window.requestAnimationFrame(step);
        }
    }, 200);  // Задержка в 200 мс, после которой считаем, что пользовательские действия прекратились
});

// Начальный запуск анимации
if (!scrollStarted) {
    scrollStarted = true;
    window.requestAnimationFrame(step);
}
Ответ написан
Ваш ответ на вопрос

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

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