У меня есть компонент реакции, в котором я хочу изменить заголовок на основе события scroll
. Я подключаю обработчик событий и на основе положения прокрутки и переключаю класс отображения, чтобы скрыть и показать желаемые элементы. повторить рендеринг. У меня есть пример в codeandbox ниже.
import React from "react";
import "./styles.css";
export default function App() {
const [scrollY, setScrollY] = React.useState(0);
React.useEffect(() => {
const handleScroll = () => {
console.log(window.pageYOffset);
setScrollY(window.pageYOffset);
};
window.addEventListener("scroll", handleScroll, { passive: true });
return () => window.removeEventListener("scroll", handleScroll);
}, [setScrollY]);
const scrolled = () => scrollY > 40;
return (
<div className="App">
<div className={`header ${scrolled() ? "d-none" : ""}`}>Header Main</div>
<div>
<div className={`header-secondary ${scrolled() ? "d-none" : ""}`}>
Header Secondary
</div>
<div className={`header-scrolled ${!scrolled() ? "d-none" : ""}`}>
HeaderScrolled
</div>
<div>Scroll Position: {scrollY}</div>
{[...Array(100)].map((e, i) => (
<div>
<div className={scrolled()}>{`SCROLLING`}</div>
</div>
))}
</div>
</div>
);
}
Моя песочница кода: https://codesandbox.io/s/wizardly-saha-0oklr
Если вы заметили, у меня есть шкура / показать условие компнента, установленное на 40 пикселей. Когда вы медленно прокручиваете около 40 пикселей, заголовок возвращается обратно, и по какой-то причине window.pageYOffset
сбрасывается до 0. Я не могу понять, почему это так?
Если вы прокручиваете достаточно быстро, этого не происходит имеет значение, но прямо там, где я переключаю класс отображения, наблюдается какое-то странное поведение.
EDIT : обновленный пример По сути, мне нужно сделать небольшой переход от Header Main
к Header Secondary
. Я не могу изменить стиль Header Main
, потому что эта часть продукта мне не принадлежит.