简体   繁体   English

滚动导航栏时更改活动列表的问题

[英]Problems with change the active list when scrolling navbar

I'm trying to change active when scrolling in nav bar but it's doesn't work with my code我正在尝试在导航栏中滚动时更改活动状态,但它不适用于我的代码

Here, this is my js code在这里,这是我的js代码

<script>
let navbar = document.getElementById("nav ul li");
    let viewportHeight = window.innerHeight;
    let navHeight = document.getElementById("nav ul li").offsetHeight;

    let navbarLinks = document.querySelectorAll("nav ul li a");

    window.addEventListener("scroll", e => {
        scrollpos = window.scrollY;
        navbarLinks.forEach(link => {
            let section = document.querySelector(link.hash);
            if (section.offsetTop <= scrollpos + 20 &&
                section.offsetTop + section.offsetHeight > scrollpos + 20) {
                link.classList.add("active");
            } else {
                link.classList.remove("active");
            }
        });
    });
</script>

Here, this is my html code在这里,这是我的html代码

<nav>
        <div class="header">Profile</div>
        <ul class="nav-links">
            <li><a href="#page1" class="active">About</a></li>
            <li><a href="#page2">Social</a></li>
            <li><a href="#page3">MyWorks</a></li>
            <li><a href="#page4">Development</a></li>
            <li><a href="#page6">Encouragement</a></li>
            <li><a href="#page7">Technique</a></li>
        </ul>
    </nav>

Ok,好的,

I think you should use document.querySelectorAll(...) instead of document.getElementById(...) , (line 2 & 4)我认为您应该使用document.querySelectorAll(...)而不是document.getElementById(...) ,(第 2 行和第 4 行)

because you are using a CSS QUERY SELECTOR.因为您使用的是 CSS QUERY SELECTOR。 you should use getElementById only when you are selecting an element by it's id .只有当您通过它的id选择一个元素时,您才应该使用getElementById

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM