tl; dr Blättern Sie nach unten für die Lösung, die für mich funktioniert hat!Reagieren - Schieben Sie die feste Navigationsleiste nach oben auf der Bildlaufleiste nach unten und schieben Sie sie nach unten nach oben
Wie man eine Folie auf einer festen navbar in einer Reaktion auf und ab bewegt?
Was ist der bessere Ansatz mit refs oder mit dem componentDidMount lifecycle hook?
hideNav = (navbar) => {
const hide =() => {
let lastScrollTop = 0;
const currentScrollTop = navbar.scrollTop;
// scroll down
if (currentScrollTop > lastScrollTop) {
navbar.classList.add('hidden');
} else {
// scroll up
navbar.classList.remove('hidden');
}
lastScrollTop = currentScrollTop;
};
window.addEventListener('scroll', hide);
};
... weiter nach unten in der Render-Methode:
render() {
return <Navbar ref={this.hideNav} />
UPDATE:
Lösung:
class Navbar extends React.Component {
state = {
auth: false,
slide: 0, // How much should the Navbar slide up or down
lastScrollY: 0, // Keep track of current position in state
};
componentWillMount() {
// When this component mounts, begin listening for scroll changes
window.addEventListener('scroll', this.handleScroll);
}
componentWillUnmount() {
// If this component is unmounted, stop listening
window.removeEventListener('scroll', this.handleScroll);
}
handleScroll =() => {
const { lastScrollY } = this.state;
const currentScrollY = window.scrollY;
if (currentScrollY > lastScrollY) {
this.setState({ slide: '-48px' });
} else {
this.setState({ slide: '0px' });
}
this.setState({ lastScrollY: currentScrollY });
};
render() {
return (
<Navbar
style={{
transform: `translate(0, ${this.state.slide})`,
transition: 'transform 90ms linear',
}}
/>
);
}
}
ich keine Optimierungen noch nicht getan haben Es wird empfohlen, das Ereignis mit requestAnimationFrame, setTim zu drosseln eout oder customEvent. Like here.
Danke für Ihre Lösung. Leider konnte ich es nicht für mich arbeiten, wie du es beschrieben hast, aber ich habe einen Weg gefunden, mit allem im Zustand der Komponente umzugehen, also muss ich keine Propeller an die Komponente weitergeben. Ich habe ein Update gepostet. – chinchilla