
Чтобы обработать событие onScroll в элементе React, назначьте функцию свойству onScroll элемента и используйте объект события для выполнения действия. Это действие будет происходить всякий раз, когда пользователь прокручивает страницу вверх или вниз.
Например:
App.jsx
import { useState } from 'react';
export default function App() {
const [scrollTop, setScrollTop] = useState(0);
const handleScroll = (event) => {
setScrollTop(event.currentTarget.scrollTop);
};
return (
<div>
Scroll top: <b>{scrollTop}</b>
<br />
<br />
<div
style={{
border: '1px solid black',
width: '400px',
height: '200px',
overflow: 'auto',
}}
onScroll={handleScroll}
>
{[...Array(10)].map((_, i) => (
<p key={i}>Content</p>
))}
</div>
</div>
);
}

Функция (прослушиватель событий), переданная реквизиту onScroll, вызывается всякий раз, когда окно просмотра прокручивается. Он вызывается с объектом события, который можно использовать для выполнения действий и доступа к информации, связанной с событием прокрутки.
Свойство currentTarget этого объекта события возвращает элемент, к которому был присоединен прослушиватель onScroll.
Совет. Если вы не знаете, когда использовать свойства currentTarget или target объекта события, вам может помочь эта статья: Event target vs currentTarget in JavaScript: The Important Difference.
Мы используем свойство scrollTop элемента, чтобы узнать, насколько далеко полоса прокрутки элемента находится от его верхней позиции. Затем мы обновляем переменную состояния новым значением, и это отражается на странице.
Примечание. Мы использовали хук useState для управления состоянием. Этот хук возвращает массив из двух значений, где первое — это переменная, хранящая состояние, а второе — функция, которая обновляет состояние при ее вызове.
Обработка события onScroll для объекта window в React
Мы также можем обработать событие onScroll для глобального объекта window, чтобы выполнить действие при прокрутке области просмотра. Мы можем сделать это с помощью метода addEventListener():
App.js
import { useState, useEffect } from 'react';
export default function App() {
const [scrollTop, setScrollTop] = useState(0);
useEffect(() => {
const handleScroll = (event) => {
setScrollTop(window.scrollY);
};
window.addEventListener('scroll', handleScroll);
return () => {
window.removeEventListener('scroll', handleScroll);
};
}, []);
return (
<div>
<div
style={{
position: 'fixed',
padding: '10px 0',
top: '0',
backgroundColor: 'white',
borderBottom: '1px solid #c0c0c0',
width: '100%',
}}
>
Scroll top: <b>{scrollTop}</b>
</div>
<div style={{ marginTop: '50px' }}>
{[...Array(30)].map((_, i) => (
<p key={i}>Content</p>
))}
</div>
</div>
);
}

Метод addEventListener() принимает до двух аргументов:
type: строка, представляющая тип события для прослушивания.listener: функция, вызываемая при возникновении события.
Он также принимает некоторые необязательные аргументы, о которых вы можете узнать подробнее здесь.
Мы вызываем addEventListener() в хуке useEffect, чтобы зарегистрировать прослушиватель, как только компонент отобразится при загрузке страницы. Мы передаем пустой массив зависимостей в useEffect, поэтому эта регистрация происходит только один раз. В функции очистки мы вызываем метод removeEventListener(), чтобы отменить регистрацию прослушивателя событий и предотвратить утечку памяти.
В слушателе onScroll мы обращаемся к свойству Window scrollY, чтобы отобразить количество пикселей, на которые страница в данный момент прокручивается по горизонтали.
Первоначально опубликовано на codingbeautydev.com
Все сумасшедшие вещи, которые делает JavaScript
Увлекательное руководство по тонким предостережениям и менее известным частям JavaScript.

Зарегистрируйтесь и немедленно получите бесплатную копию.
Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube,и Discord. Заинтересованы в Взлом роста? Ознакомьтесь с разделом Схема.