You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

滚动时菜单背景颜色未改变,如何实现滚动超50像素时转为黑色?

滚动菜单背景变色失效的问题修复

嘿,我一眼就看到问题所在了——你用了classList.toggle("change"),但这个方法的逻辑是类存在就移除,不存在就添加,这就导致当你持续滚动(比如滚动距离一直大于50px)时,每次触发scroll事件都会反复切换这个类,看起来就像颜色没变化;而且当你滚动回50px以内时,也没有代码去移除这个类,菜单会一直保持黑色。

修复后的完整代码

JavaScript 逻辑修正

function myFunction() {
  const menu = document.getElementById("test");
  // 兼容不同浏览器的滚动距离获取
  const scrollDistance = document.body.scrollTop || document.documentElement.scrollTop;
  
  if (scrollDistance > 50) {
    menu.classList.add("change"); // 超过50px时添加黑色背景类
  } else {
    menu.classList.remove("change"); // 回到50px以内时移除类
  }
}

CSS 保持不变

#test {
  background-color: #d2d2d2;
  height: 90px;
  position: fixed;
  top: 0;
  left: 0;
}
.change {
  background-color: black;
}

关键补充:绑定滚动事件

别忘了把函数绑定到window的scroll事件上,不然函数根本不会触发!你可以二选一:

  1. 在HTML里直接绑定:
<body onscroll="myFunction()">
  1. 在JavaScript里用事件监听(更推荐这种方式,分离HTML和逻辑):
// 页面加载完成后绑定事件
window.addEventListener('DOMContentLoaded', () => {
  window.addEventListener('scroll', myFunction);
});

这样修改后,滚动超过50px时菜单会稳定变成黑色,滚回去就恢复浅灰,完美解决你的问题~

内容的提问来源于stack exchange,提问作者TakeDown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:41:03