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

如何实现滚动时显示box-shadow、停止滚动后隐藏的效果?

实现滚动显示阴影、停止滚动隐藏阴影的方案

这个需求很典型,咱们可以借助**定时器(setTimeout)**来精准检测滚动停止的时机,核心逻辑是:每次滚动触发时重置定时器,确保只有当用户停止滚动一段时间后,才会移除阴影。下面给你两种实现方式:

方式一:直接操作行内样式

这种方式适合快速测试,直接修改元素的style属性:

var topBar = document.getElementById('top-bar');
var wrapper = document.getElementById('wrapper');
let scrollTimer; // 存储定时器ID,用于后续清除

wrapper.onscroll = function () {
  // 每次滚动时先清除之前的定时器,避免未到时间就执行隐藏
  clearTimeout(scrollTimer);
  
  // 滚动过程中显示阴影
  topBar.style.boxShadow = "10px 20px 30px blue";
  
  // 设置300ms延迟,若期间无新滚动事件则隐藏阴影
  scrollTimer = setTimeout(() => {
    topBar.style.boxShadow = "none";
  }, 300);
};

方式二:用CSS类切换(推荐)

把样式逻辑从JS中抽离到CSS里,更利于维护和扩展:

首先在CSS中定义阴影样式:

.top-bar--shadow {
  box-shadow: 10px 20px 30px blue;
}

然后修改JS代码,通过添加/移除类来控制阴影:

var topBar = document.getElementById('top-bar');
var wrapper = document.getElementById('wrapper');
let scrollTimer;

wrapper.onscroll = function () {
  clearTimeout(scrollTimer);
  topBar.classList.add('top-bar--shadow');
  
  scrollTimer = setTimeout(() => {
    topBar.classList.remove('top-bar--shadow');
  }, 300);
};

关键细节说明

  • 延迟时间(示例中的300ms)可以根据需求调整:如果觉得阴影消失得太快,就调大到500ms;想要更灵敏就调小到200ms。
  • clearTimeout(scrollTimer)是核心:它能确保每次滚动都会重置定时器,只有当用户真正停止滚动后,定时器才会走完延迟时间,执行隐藏操作。

内容的提问来源于stack exchange,提问作者Eddie Taliaferro II

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:31:44