reactjs - 如何使 React Navbar 在滚动时更改背景颜色以正常工作?
问题描述
这是我的代码框https://codesandbox.io/s/intelligent-sunset-smk2f?file=/src/Navbar.js
因此,我的页面刷新导航栏当前显示为红色,但它应该是透明的。此外,当您滚动时,前 100 像素会变为透明,然后再次切换回红色。任何理由如何解决这个问题?
默认情况下它应该是透明的,然后变为红色,但它不能正常工作。
const changeBackground = () => {
if (window.pageYOffset >= 100 && location.pathname === "/") {
setNavbar(window.pageYOffset);
} else {
setNavbar(false);
}
};
useEffect(() => {
const watchScroll = () => {
window.addEventListener("scroll", changeBackground);
};
watchScroll();
// Remove listener (like componentWillUnmount)
return () => {
window.removeEventListener("scroll", changeBackground);
};
}, []);
我只希望它在我的主页上是透明的,"/"
然后在滚动 100 像素后变成红色。但是对于关于页面,我只希望它永久为红色并禁用滚动功能。
更新:所以我想知道如果我删除了这段代码,那么如果我滚动超过 100px 值,滚动就会正常工作,但现在的问题是我无法根据位置路径名更新导航栏颜色?
useEffect(() => {
if (location.pathname) {
setNavbar(location.pathname);
}
console.log(location.pathname);
}, [location.pathname]);
这是我找到我所在页面位置的功能,但它一直导致我的滚动功能出现问题。那么如何在不破坏滚动功能的情况下检查页面路由呢?
解决方案
我已经创建了代码框,我猜它可以按您的预期工作,它只需要在 useEfeect 函数中进行一些修改。 https://codesandbox.io/s/admiring-chandrasekhar-skr7i?file=/src/Navbar.js
推荐阅读
- javascript - 在 useEffect 中获取后反应状态仍然未定义
- javascript - 提交按钮充当折叠和提交
- html - 在高度属性中使用像素值与百分比一有何不同?
- r - 如何指定 x 和 y 轴刻度之间的距离?
- flutter - SocketException:主机查找失败:'...com'(操作系统错误:提供节点名或服务名,或未知,errno = 8)
- php - 代码加密与数据库列加密
- azure - Azure 事件中心捕获已打开,但未收到任何文件
- git - 使用 GitHub 向项目添加新功能的最佳方式
- python - 如何删除由“̶i̶s̶i̶n̶(̶)̶”df.mask()找到的单元格和剪切行?
- javascript - 将变量带出函数范围(JS)