react页面滚动时导航栏的显示与隐藏

代码主要实现了导航栏跟随页面显示隐藏,页面向下滚动时导航栏消失,向上滚动导航栏显示,这个可以动态的去调整

样式代码

.show {
  position: fixed;
  top: 0px;
  transition: 0.3s linear;
  background-color: #ffffff;
  border-bottom: 1px solid rgba(0, 0, 0, 0.1);
  box-shadow: 0 2px 5px -1px rgba(0, 0, 0, 0.08);
}
.hide {
  position: fixed;
  top: -65px;
  border-bottom: 1px solid rgba(0, 0, 0, 0.1);
  box-shadow: 0 2px 5px -1px rgba(0, 0, 0, 0.08);
  transition: 0.3s linear;
}

这里有一点需要注意:在我们去监听滚动的时候需要重新定义一个新的变量用于根据新老元素滚动的偏移量来判断导航栏的显示和隐藏

逻辑代码

声明一个状态用于控制显示和隐藏,在useEffect中进行监听和销毁操作

const [isShow, setIsShow] = useState(false)
useEffect(() => {
    // 监听
    window.addEventListener('scroll', handleScroll)
    // 销毁
    return () => window.removeEventListener('scroll', handleScroll)
  }, [])

在回调函数中拿到scrollTop偏移量的值

  let lastScrollTop = 0;
  const handleScroll = () => {
    let clientHeight = document.documentElement.clientHeight //可视区域高度
    let scrollTop = document.documentElement.scrollTop; //滚动条滚动高度
    let scrollHeight = document.documentElement.scrollHeight; //滚动内容高度
    // console.log("scrollTop", scrollTop, 'lastScrollY', lastScrollTop, 'clientHeight', clientHeight, 'scrollHeight', scrollHeight);
    if (scrollTop > lastScrollTop) {
      setIsShow(true)
    } else {
      setIsShow(false)
    }
    lastScrollTop = document.documentElement.scrollTop
    // 判断是否滚动到底部
    if (scrollTop + clientHeight === scrollHeight) {
      console.log("滚动到底部");
    }
  }

判断样式状态,进行显示和隐藏

    <div>
      <Header className={`show ${isShow && 'hide'}`}>
        <Menu
          items={items}
          mode="horizontal"
          selectedKeys={selectKeys}
          onClick={handleSwitch}
        />
      </Header>
    </div >

页面导航栏正常根据滚动偏移量进行显示和隐藏~

参考链接:

How to reveal a React component on scroll

滚动使用react.js时如何显示或隐藏导航栏?

个人博客已上线,欢迎来访~
传送门:夜雨炊烟

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜雨炊烟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值