Чтобы обработать событие 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. Заинтересованы в Взлом роста? Ознакомьтесь с разделом Схема.