导航栏未使用 javascript 隐藏在滚动条上

Navbar is not hiding on scroll using javascript

我很难在向下滚动时隐藏导航栏。我知道该怎么做,但由于一些愚蠢的错误我无法这样做,也无法弄清楚问题所在。

这是html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <link rel="stylesheet" href="style.css">

    <title>Document</title>
</head>
<body>
    <div id="navbar">
        <div id="logo">
            <a href="#">
                <h1>My logo</h1>
            </a>
        </div>
        <ul id="menu">
            <li><a class="link-button" href="#">HOME</a></li>
            <li><a class="link-button" href="#">ARTICLES</a></li>
            <li><a class="link-button" href="#">PROJECTS</a></li>
            <li><a class="link-button" href="#">AUTHOR</a></li>
            <li><a class="link-button" href="#">CONTACT</a></li>
        </ul>
    </div>

    <div id="welcome">
        <h1 id="welcome-text">My Portfolio</h1>
    </div>

    <div class="container">
    </div>

    <!-- Here script for hidding navbar on scroll down  -->

    <script>
        window.addEventListener("scroll", function(){
            let Navbar = document.getElementById('navbar');
            if(window.pageYOffset > 0){
                Navbar.classList.add("navbar-scroll");
            }else{
                Navbar.classList.remove("navbar-scroll");
            }
        });
    </script>
</body>
</html>

这是完整的 css

*{
    margin: 0;
    padding: 0;
    box-sizing: border-box;
    font-family: sans-serif;
}

body{
    height: 100vh;
    perspective: 1px;
    transform-style: preserve-3d;
    overflow-x: hidden;
    overflow-y: auto;
}

html{
    overflow: hidden;
}

#navbar{
    position: sticky;
    width: 100%;
    top: 0;
    transition: background 0.5s;
    background-color: transparent;
    z-index: 2;
}

#navbar #logo{
    float: left;
    margin: 10px;
}

#navbar #logo a{
    font-size: 155%;
    color: #ffffff;
    text-decoration: none;
}

#navbar ul{
    float: right;
    justify-content: space-around;
    list-style: none;
    align-items: center;
    padding: 20px;
}

#navbar ul li{
    display: inline-block;
}

/* === Here I'm changing the display property of the navbar to none to make it disappear. === */

#navbar.navbar-scroll{
    display: none;
}

.link-button{
    display: block;
    text-align: center;
    margin: 0 15px;
    font-size: 89%;
    color: #ffffff;
    text-decoration: none;
}

.link-button::after{
    content: '';
    display: block;
    width: 0;
    height: 2px;
    margin-top: 2px;
    background: #ffffff;
    transition: width .3s;
}

.link-button:hover::after{
    width: 100%;
    transition: width .3s;
}

#welcome{
    height: 100vh;
    width: 100vw;
    box-sizing: border-box;
}

#welcome::before{
    content: "";
    height: 100vh;
    width: 100vw;
    top: 0;
    left: 0;
    background: linear-gradient(#0000008e, #0000008e), url('static/bc22.jpg');
    background-position: center;
    -webkit-background-size: cover;
    -moz-background-size:  cover;
    -o-background-size: cover;
    background-size: cover;
    position: absolute;
    z-index: -1;
    transform: translateZ(-2px) scale(3);
}

#welcome-text{
    color: #ffffff;
    position: absolute;
    top: 50%;
    left: 26%;
    transform: translate(-50%, -50%);
    /* text-align: center; */
    font-size: 600%;
}


.container{
    background-color: #1f1f1f;
    height: 1000px;
}

在 CSS 中,我还尝试更改滚动条上导航栏的背景颜色(在 #navbar.navbar-滚动条中),但效果不佳。所以最有可能的错误是在 javascript 我认为。

如果有更好的方法在滚动时隐藏导航栏,那我们也欢迎。

感谢您的宝贵时间。

其实问题出在你的HTMLoverflow: hidden;下面。因此 当您将 HTML 溢出设置为 hidden 时,window.addEventListener("scroll", function () {}) 将永远不会调用 ,因为 window 根本不会滚动。因此 要解决此问题,您应该从样式中删除 html{overflow: hidden;} 或添加事件监听器以监听 body 元素,但不推荐这样做。

从您的 CSS 来看,您的目标似乎是将主体作为滚动容器而不是 <HTML> 本身。

像这样的东西应该可以作为你的 JavaScript:

document.body.addEventListener("scroll", function(){
  let Navbar = document.getElementById('navbar');
  if(document.body.scrollTop > 0){
    Navbar.classList.add("navbar-scroll");
  }else{
    Navbar.classList.remove("navbar-scroll");
  }
});

如果您在 CSS 中定义,几乎每个可以包含子项的标签都可以滚动。这意味着您也必须在 JS 中听取正确的元素。