光泽扫过按钮(点击触发/悬停自动扫光特效源码)
光泽扫过按钮:悬停自动扫光与点击重复触发两种模式,斜向光带 + 微偏移旋转,纯 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 |
兼容性与性能
- 扫光核心是伪元素 + transform 过渡,兼容所有现代浏览器,IE 不支持 transform 过渡动画但静态可用
pointer-events: none保证光带不拦截点击事件,无障碍友好- 过渡只动 transform,性能优秀;
void btn.offsetWidth强制 reflow 属轻量操作,仅在点击时执行一次 - 悬停自动款无需 JS;如需循环扫光,把 transition 换成
animation并设置 infinite 即可
常见问题
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(缓动曲线)等属性即可,代码中有注释说明。