Запускает две функции из прослушивателя событий (одна ограничена, другая нет)

1

У меня есть прослушиватель событий для событий прокрутки, который запускает функцию, ответственную за добавление элемента в область просмотра. Тот же самый прослушиватель событий прокрутки дросселируется, чтобы предотвратить ливень событий прокрутки (более управляемый). Библиотека, используемая для дроссельной заслонки, является throttle-debounce. Проблема: дросселирование handlePageScroll все, что содержится в этом методе (конечно).

Код:

componentDidMount() {
  window.addEventListener('scroll', throttle(2000, this.handlePageScroll));
}

handlePageScroll = () => {
  someFn() // logic for appending an element, does not need throttling
  this.loadNextBatch(); // logic that actually needs to be throttled
};

Я пробовал дросселировать изнутри handlePageScroll без успеха. Есть ли способ запустить две функции из прослушивателя событий? Заранее спасибо.

Теги:
addeventlistener
throttle

1 ответ

1
Лучший ответ

Вот решение, поддерживая состояние:

componentDidMount() {
  let throttled = false
  window.addEventListener('scroll', () => {
    if (!throttled) {
      throttle(2000, () => {
        this.loadNextBatch()
        throttled = false
      })()
      throttled = true
    }
    someFn()
  })
}
  • 0
    Это выглядит фантастически, за исключением того, что использование функции стрелки внутри прослушивателя событий приводит к поломке газа. Он запускается множество раз по сравнению с тем, когда он был просто addEventListener('scroll', throttle(2000, this.handlePageScroll))
  • 0
    Ах, да, ты прав, это ошибка с моей стороны. Я отредактирую свой ответ решением через несколько минут.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню