2020/09/28 react函数式组件 useEffect 监听滚动事件 获取滚动高度

本文介绍了一种方法,通过JavaScript实现当页面滚动到一定高度时,导航栏从固定位置变为粘顶效果。代码示例展示了如何设置CSS样式并在窗口滚动事件中动态调整导航栏的位置和样式,确保在不同滚动状态下的平滑过渡。同时,更新后的代码加入了事件监听器的清理,避免页面跳转后仍继续执行滚动事件。
摘要由CSDN通过智能技术生成
  • 目标效果,以圆通速递官网为例
    在这里插入图片描述
    –滑动一定高度后
    在这里插入图片描述

  • 代码
    在这里插入图片描述
    –代码块

const reductionStyle = {
    position:"absolute",
    top:"3.75rem",
    width:"80%",
    borderRadius:"40px",
    marginLeft:"10%",
    zIndex:"9999"
}


function ChangeNav() {
    let handleScroll = function(){
        // console.log("111")
        let changeNav_box = document.querySelector(".changeNav-box");
        let scrollY = window.scrollY;
        // console.log(scrollY)
        if(scrollY >= 30){
            changeNav_box.style.position="fixed";
            changeNav_box.style.top="1.875rem";
            changeNav_box.style.width="100%";
            changeNav_box.style.marginLeft="0px"
            changeNav_box.style.borderRadius="0px"

        }else{
            // changeNav_box.style.position="absolute";
            // changeNav_box.style.top="3.75rem"
            // changeNav_box.style.width="80%"
            // changeNav_box.style.borderRadius="40px"
            // changeNav_box.style.marginLeft="10%"
            changeNav_box.style={reductionStyle}
        }
    }

    useEffect(()=>{
        console.log("222")
        window.addEventListener("scroll",handleScroll)
        handleScroll()
    })

–reductionStyle 写的是样式,可以提前在函数之前声明

**=========更新===========**
useEffect中要移除刚刚监听的事件,否则如果有路由跳转到下个页面会继续监听,而此时页面上已经没有handleScroll方法了

  • 代码
useEffect(() => {
        // console.log("222")
        window.addEventListener("scroll", handleScroll)
        handleScroll()
        return () => {
            window.removeEventListener("scroll", handleScroll)
        }
    })
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值