Skip to content

Instantly share code, notes, and snippets.

@u88803494
Created February 3, 2020 09:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save u88803494/1ec8c8672843ba6aaa6a78c4fe5f1b44 to your computer and use it in GitHub Desktop.
Save u88803494/1ec8c8672843ba6aaa6a78c4fe5f1b44 to your computer and use it in GitHub Desktop.
React 隱藏導覽列的 code
.navbar--hide {
visibility: hidden;
}
import React from 'react';
import { Nav, Navbar } from 'react-bootstrap';
import './nav.css';
class TheNavbar extends React.Component {
constructor(props) {
super(props)
this.state = {
positionY: window.pageYOffset,
movedY: 0,
isHidden: false,
}
}
componentDidMount() {
window.addEventListener('scroll', this.handleScroll)
}
componentWillUnmount() {
window.removeEventListener('scroll', this.handleScroll)
}
handleScroll = () => {
const lastPositonY = this.state.positionY; // 取得舊位置
this.setState({
positionY: window.pageYOffset,
}, () => this.calculateScrollWidth(lastPositonY)); // 取得新位置
}
calculateScrollWidth = (lastPositonY) => {
const { movedY } = this.state;
const ScrollWidth = window.pageYOffset - lastPositonY; // 當前位置扣掉原始位置的高度
this.setState({ movedY: movedY + ScrollWidth, }, this.shouldHidden)
}
shouldHidden = () => {
const { movedY, positionY } = this.state;
if (movedY >= 80) {
this.setState({
movedY: 0,
isHidden: true,
})
} else if (movedY <= -175 || positionY <= 35) {
this.setState({
movedY: 0,
isHidden: false,
})
}
}
render() {
const { isHidden } = this.state;
return (
<Navbar
collapseOnSelect
expand="lg"
bg="dark"
variant="dark"
fixed="top"
className={isHidden && "navbar--hide"}
>
<Navbar.Brand href="/#">React-Bootstrap</Navbar.Brand>
<Navbar.Toggle aria-controls="responsive-navbar-nav" />
<Navbar.Collapse id="responsive-navbar-nav">
<Nav className="mr-auto">
<Nav.Link href="/#">首頁</Nav.Link>
<Nav.Link href="/#posts">文章列表</Nav.Link>
<Nav.Link href="/#about">關於我</Nav.Link>
</Nav>
</Navbar.Collapse>
</Navbar>
)
};
}
export default TheNavbar;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment