gpt4 book ai didi

javascript - 使用reactstrap导航栏进行 react : how to add and remove class on navbar tag when window scrolls

转载 作者:太空宇宙 更新时间:2023-11-04 15:25:22 26 4
gpt4 key购买 nike

我有一个 React 应用程序,它有一个 Reactstrap 导航。

当窗口向下滚动到一定高度时,如何向导航栏添加和删除类?

因此默认状态具有“navbar navbar-expand-sm navbar-light Stick-nav”类

当窗口滚动 40px 高度时,类将变为“navbar navbar-expand-sm navbar-light bg-light fixed-top”

然后当它滚动回到顶部时,它的类将返回到默认状态。

提前致谢。

import React, { Component } from 'react';
import './Header.css';
import {
Collapse,
Navbar,
NavbarToggler,
NavbarBrand,
Nav,
NavItem,
NavLink} from 'reactstrap';

class Header extends Component {
constructor(props) {
super(props);

this.toggle = this.toggle.bind(this);
this.state = {
isOpen: false
};
}
toggle() {
this.setState({
isOpen: !this.state.isOpen
});
}



render() {
return (

<Navbar expand="md" className="stick-nav">
<NavbarBrand href="/">BrandName</NavbarBrand>
<NavbarToggler onClick={this.toggle} />
<Collapse isOpen={this.state.isOpen} navbar>
<Nav className="ml-auto" navbar>
<NavItem>
<NavLink href="/link1" className="text-uppercase">link1</NavLink>
</NavItem>
<NavItem>
<NavLink href="/link2" className="text-uppercase">link2</NavLink>
</NavItem>
<NavItem>
<NavLink href="/link3" className="text-uppercase">link3</NavLink>
</NavItem>
</Nav>
</Collapse>
</Navbar>

);
}
}


export default Header;

最佳答案

您可以使用window.addEventListener来完成此操作。

componentDidMount() {
window.addEventListener('scroll', this.mainMenuScroll, false);
}

componentWillUnmount() {
window.removeEventListener('scroll', this.mainMenuScroll, false);
}

mainMenuScroll() {
if (window.scrollY >= 40) {
if (this.state.scrollClass !== true) {
this.setState({
scrollClass: true,
});
}
} else if (this.state.scrollClass !== false) {
this.setState({
scrollClass: false,
});
}
}

此外,请确保在 this.state 中添加 scrollClass 并在构造函数中绑定(bind) mainMenuScroll

this.state.scrollClass 等于 true 时,在导航栏组件的 className 中应用所需的类。

关于javascript - 使用reactstrap导航栏进行 react : how to add and remove class on navbar tag when window scrolls,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50718024/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com