javascript - 修复了导航栏在不在顶部且不滚动时消失的问题,无法按预期工作
问题描述
我正在尝试构建一个在window.pageYOffset
小于 500 时正常显示的导航栏,否则它将在滚动时显示并在用户停止滚动后隐藏 1200 毫秒。这是我的 CodePen https://codepen.io/youssefwael/pen/LYZKmom,在 js 的底部你会看到我卡在的部分
document.addEventListener("scroll", () => {
nav.style.display = "block";
clearTimeout(hide);
if (window.pageYOffset > 500) {
const hide = setTimeout(() => {
nav.style.display = "none";
}, 1200);
}
});
我在这里做错了什么?从昨天开始,我一直在尝试解决这个问题,因为我觉得它真的应该起作用。目前,如果您快速上下滚动,它会导致超时。此外,从底部向上快速滚动会导致导航栏在顶部消失,这是不应该发生的。我认为添加clearTimeout()
将解决这两个问题,但事实并非如此。
提前致谢。
解决方案
对于滚动行为,我在您的事件侦听器中进行了一些更改这是一个简化版本:
const myNavbar = document.querySelector(".navbar__menu");
document.addEventListener("scroll", () => {
if (window.pageYOffset > 500) {
myNavbar.classList.add("navbar-fixed");
myNavbar.classList.remove("navbar-relative");
}
else if (window.pageYOffset < 500) {
myNavbar.classList.add("navbar-relative");
myNavbar.classList.remove("navbar-fixed");
}
});
您可以基于这些类简单地使用相对样式或固定在导航栏上。您的代码中还有一个错误,因为在其范围之外无法访问隐藏变量
推荐阅读
- ios - kivy-ios 上带有 ios 配方的超链接
- c# - 属性更改时的 MultiBinding 颜色更改 - 如何务实地清除?
- android - AdvertisingIdClient:从 SharedPreferences 读取时出错 java.lang.SecurityException:不再支持 MODE_WORLD_READABLE
- bash - 对包含行分隔符的文件进行排序
- sql-server - 工资计算
- vb.net - 是否可以通过发送 SMS 在 VB.NET 中执行代码?
- compiler-errors - 发布 MVC .net 网站后的问题 - 编译错误
- mixpanel - 如何使用 Zapier 从 mixpanel 读取 json webhook?
- docker - 从具有不同 teamcityagent 名称的一个映像运行多个 docker 容器
- java-money - 没有MonetaryAmountsSingletonSpi 加载