css 使用js滚动时类未变为活动状态

kmpatx3s  于 2022-12-30  发布在  其他
关注(0)|答案(1)|浏览(106)

我试图使它,当您滚动我的HTML页面时,当您到达某个部分时,相应的部分应该变为活动的,
例如:

<nav class="scrollmenu">
  <ul>
    <li class="starters"><a href="#starters">STARTERS</a></li>
    <li class="ramen"><a href="#ramen">RAMEN</a></li>
 </ul>
</nav>

当您到达页面上的此部分时,初学者应处于活动状态:第一个月
我试着用这个JS代码来做这件事:

const sections = document.querySelectorAll("section");
const navLi = document.querySelectorAll("nav ul li");

window.addEventListener("scroll", () => {
  let current = " ";
  sections.forEach((section) => {
    const sectionTop = section.offsetTop;
    const sectionHeight = section.clientHeight;
    if (scrollY >= sectionTop) {
      current = section.getAttribute("id");
    }
  });

  navLi.forEach((li) => {
    li.classList.remove("active");
    if (li.classList.contains(current)) {
      li.classList.add("active");
    }
  });

});
我仍然要扩展这个JS代码,使它更好地工作,但如果我没有弄错,它应该已经使类可视化活动时,我在右边的部分。
如果你想知道我的CSS看起来像这样的时间:

nav ul li:active {
  background-color: blue;
}
64jmpszr

64jmpszr1#

这里发生的情况是,您附加了一个活动的类名,并且没有声明该类,只有在单击元素时触发的事件:active,因此必须执行此操作

.active {
  background-color: blue;
}

当你设置类并删除它时,这将起作用,也会让css代码保持原样,当html li元素被点击时,它会改变背景,然后改变为正常颜色,尝试一下,让我知道它是否起作用,如果不起作用,是关于你的js的,然后我会检查它

相关问题