Задать вопрос
@Zombie42679
Пытаюсь верстать, учу JS, когда-нибудь стану топом

Можно ли несколько событий скролла считать за одно?

Собственно, хочу понять, как можно сделать, чтобы при прокрутке колесиком мыши вниз/вверх независимо насколько сильно крутанули колесо - это считалось за одной событие. В примере ниже, за одну прокрутку у меня событие скролла вызывалось до 10 раз, можно ли это превратить в 1 раз или как-то контролировать, может задержку давать ?

5d2076f956937027667017.jpeg

Пример: https://jsfiddle.net/jmh4vte8/1/
  • Вопрос задан
  • 83 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Ищем готовое или реализовываем самостоятельно:

function debounce(f, delay) {
  let timeoutId = null;

  return function() {
    clearTimeout(timeoutId);
    timeoutId = setTimeout(() => f.apply(this, arguments), delay);
  };
}

function throttle(f, delay) {
  let lastCall = -Infinity;

  return function() {
    const now = +new Date;
    if (now - lastCall > delay) {
      lastCall = now;
      return f.apply(this, arguments);
    }
  };
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@MarvinJan
Например так.

В таймауте ставите нужное время в миллисекундах, после которого считается, что скролл прекратился.

(function(){
   let scrollingStopped;
   document.addEventListener("mousewheel", function() {
      clearTimeout(scrollingStopped);
      let is_scrolling = true;
      scrollingStopped = setTimeout( function() {
          is_scrolling = false;
          console.log("stopped");
    }, 500)
})
})();
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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