光泽扫过按钮(点击触发/悬停自动扫光特效源码)

CSSJS 许可:自研原创

光泽扫过按钮:悬停自动扫光与点击重复触发两种模式,斜向光带 + 微偏移旋转,纯 CSS + 少量 JS,提升按钮质感与点击反馈。

效果演示(真实可交互)

第一个按钮:每点一次扫过一道光;第二个:悬停自动扫光

完整代码

HTML 结构:

<button id="ss-btn" class="ss-btn">点击触发光泽</button>
<button class="ss-btn ss-auto">悬停自动扫光</button>

CSS 核心代码:

.ss-btn { position: relative; padding: 14px 38px;
  background: #1b1f2e; color: #fff; overflow: hidden; cursor: pointer; }

/* 光泽层:斜置的光带 */
.ss-btn::after {
  content: ''; position: absolute; top: -20%; left: -70%;
  width: 40%; height: 140%;
  background: linear-gradient(105deg, transparent,
    rgba(255,255,255,.38), transparent);
  transform: translateX(0) skewX(-18deg);
  transition: transform .65s cubic-bezier(.4,0,.2,1);
  pointer-events: none;
}
/* 扫过:位移 420% 保证完全穿过按钮 */
.ss-btn.ss-sweep::after,
.ss-auto:hover::after {
  transform: translateX(420%) skewX(-18deg);
}

JS 重复触发(点击重放动画):

const btn = document.getElementById('ss-btn');
btn.addEventListener('click', () => {
  btn.classList.remove('ss-sweep');
  void btn.offsetWidth;            // 强制 reflow,重启动画
  btn.classList.add('ss-sweep');
  setTimeout(() => btn.classList.remove('ss-sweep'), 700);
});

参数说明

参数取值说明
光带尺寸width: 40%; height: 140%高度超过按钮保证覆盖
起始位置left: -70%光带初始藏在按钮左侧外
位移终点translateX(420%)需 > (100% + 40%) 保证完全穿过
倾斜角skewX(-18deg)让光带呈斜向扫过,更有速度感
扫过时长.65s越快越干脆,建议 .5~.8s
光带透明度.38深色背景建议 .3~.5

兼容性与性能

常见问题

Q: 点击重放为什么需要强制 reflow? 连续点击时类名先移除再加,如果浏览器合并了两次样式变更,动画不会重新触发;void btn.offsetWidth 强制浏览器立即计算样式,确保动画重放。

Q: 扫光扫不过去怎么办? 终点位移要大于光带宽度加按钮宽度,即 translateX(420%) 中的百分比要足够大;如果按钮特别宽,把百分比调高或改用像素值。

Q: 光带可以带品牌色而不是白色吗? 可以,把 rgba(255,255,255,.38) 换成品牌色的半透明渐变,如 rgba(77,150,255,.45)。

Q: 如何实现来回扫的呼吸式扫光? 把过渡改为 animation: ss-swing 1.6s ease-in-out infinite alternate,位移在 0 与 420% 之间往返即可。

许可与来源

  • 许可证:自研原创 —— 粤喵自研原创,可免费用于个人与商业项目,无需署名。查看来源公示与许可清单
  • 来源:粤喵团队原创自研(从效果思路到代码实现均为独立完成,未直接复制第三方代码)
  • 首次发布:2026-09-01 · 最近更新:2026-09-01
  • 修改日志:2026-09-01 首次发布;2026-09-13 补充许可证与来源标注、复制按钮说明与法务页入口
  • 纠错:联系页面 / min@cactus.asia,2 个工作日内核实处理

常见问题

这个组件可以商用吗?

可以。本组件为粤喵自研原创,可免费用于个人和商业项目,无需署名。

浏览器兼容性如何?

支持所有现代浏览器(Chrome / Firefox / Safari / Edge 最新版本)。旧版 IE 不支持 CSS 动画相关特性。

怎么修改动画参数?

直接调整 CSS 中的 animation-duration(时长)、animation-timing-function(缓动曲线)等属性即可,代码中有注释说明。

✍️ 作者与审核