当前位置: 首页 > 知识库问答 >
问题:

使用reactstrap navbar进行React:如何在窗口滚动时添加和删除navbar标记上的类

公羊招
2023-03-14

我有一个react应用程序,有一个reactstrap导航。

当窗口向下滚动到一定高度时,我如何向navbar添加和移除类?

因此默认状态的类为“navbar navbar-展开-sm navbar-light stick-nav”

当窗口滚动40px高度时,类将变为“Navbar Navbar-展开-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;

共有1个答案

吕利
2023-03-14

您可以使用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并在构造函数中绑定MainMenusCroll

并且在Navbar组件的classname中,当this.state.scrollclass等于true时,应用所需的类。

 类似资料:
  • 当到达某个元素时,此函数将添加所需的类,但之后元素似乎会不断抖动。在scroll上应用类的这种方式是否有问题?这是一个演示(如果需要,请缩小窗口大小,以便您可以滚动浏览内容):https://codepen.io/anon/pen/ooZZja

  • 问题内容: 我不想要做的是在地图上显示从某些移动设备上选择的位置。有关位置的数据在那里。 我这里需要根据从服务器接收到的数据在地图上添加标记。 假设我已经将位置数据 ({Lat,Lang}) 设置为 状态标记, 然后如何添加它以显示在地图中。 我的地图代码如下! 使用过的npm包:-谷歌地图反应 问题答案: 您可以尝试: 如果有错误,也请在此处显示,我们稍后可以修复 =========== 标记点

  • 我是Angular的新手,在一个项目中,第二个div应该开始滚动一个,第一个div到达它的底部。我已经设法使用普通Javascript实现了它,但不确定如何在Angular中实现同样的功能。如有任何帮助,我们将不胜感激。在这里拉小提琴 样式 HTML 脚本

  • 问题内容: https://jsfiddle.net/techboy0007/j1eas924/ https://i.stack.imgur.com/KXFot.png 问题答案: 您可以通过反应状态来实现。在您的情况下,您正在使用嵌套对象,因此在更新它们时需要格外小心。 突变您的想法不是一个好主意,因为它很容易导致错误或意外行为。 仔细查看这些功能的工作方式。 在这里,您有一个现场演示。 PD:

  • 问题内容: 如何从窗口标题栏中删除tkinter图标 问题答案: 在Windows上 步骤1: 使用图标编辑器或类似rw-designer的网站创建透明图标。另存为。 第二步: 在Unix上 类似,但使用图标。