滚动模糊揭示特效(模糊到清晰入场,强度实时可调)
滚动模糊揭示特效:内容随滚动从模糊到清晰逐渐显现,模糊半径 6-28px 实时可调,GPU 加速滤镜,IntersectionObserver 驱动,零依赖自研实现。
效果演示(真实可交互)
🌫️ 向下滚动:内容从模糊到清晰逐渐显现,注意力自然聚焦
模糊揭示:让注意力自然聚焦
模糊揭示(Blur Reveal)与普通淡入的最大区别在于「聚焦感」:文字先以模糊状态进入视口,再逐渐清晰,模拟人眼对焦的过程,特别适合产品主标语与品牌主张。
实现上只需在初始状态叠加 `filter: blur()`,进入视口后过渡回 `blur(0)`。模糊滤镜由 GPU 加速,配合透明度与轻微位移,视觉层次非常干净。
卡片示例
性能提示:模糊滤镜虽然由 GPU 加速,但大面积的 blur 仍比普通透明度贵一些,建议把模糊层限制在文字与小块卡片上,避免整屏背景长时间处于模糊状态。
强度调节:下方滑块控制模糊半径(6-28px)。半径越大「雾感」越强,入场过程越戏剧化;品牌场景建议 8-16px,克制而高级。
演示区用内嵌滚动容器模拟页面滚动:标题、段落与卡片都先以模糊状态进入视口,再逐渐对上焦。模糊强度滑块实时生效,「重新播放」一键重看。
完整代码
<div class="sb-scroller" id="sbScroller" style="--sb-blur: 14px">
<h3 class="sb-item">模糊揭示:让注意力自然聚焦</h3>
<p class="sb-item">文字先模糊进入视口,再逐渐清晰……</p>
</div>
.sb-item {
opacity: 0;
filter: blur(var(--sb-blur, 14px));
transform: translateY(18px);
transition: opacity .7s ease, filter .7s ease, transform .7s ease;
}
.sb-item.in { opacity: 1; filter: blur(0); transform: none; }
const io = new IntersectionObserver(entries => {
entries.forEach(en => {
if (en.isIntersecting) {
en.target.classList.add('in'); // 进入视口 → 模糊清零
io.unobserve(en.target);
}
});
}, { root: scroller, threshold: 0.2 });
items.forEach(el => io.observe(el));
实现要点:初始状态叠加 filter: blur(14px)、透明度 0 与轻微下移,进入视口后过渡回清晰。模糊半径用 CSS 变量 --sb-blur 统一控制,滑块只改这一个变量即可全局生效,无需改动 JS。
参数说明
| 参数 | 位置 | 说明 |
|---|---|---|
| 模糊半径 | --sb-blur 变量 | 6-28px,品牌场景建议 8-16px |
| 动画时长 | transition 的 0.7s | 0.5-0.9s 区间观感最佳 |
| 触发阈值 | threshold: 0.2 | 元素进入视口 20% 时触发 |
| 位移距离 | translateY(18px) | 与模糊叠加,避免「原地变清晰」的生硬 |
| 监听根 | root: scroller | 局部容器用容器元素,整页用 null |
兼容性与性能
- 模糊滤镜由 GPU 加速,动画只操作
filter、opacity、transform三个合成器属性,不触发布局重排 - IntersectionObserver 异步调度,滚动过程零 JS 计算;触发一次后立即
unobserve,长页面零残余开销 - 建议控制同时处于模糊状态的元素数量(不超过一屏),大面积长时间模糊会增加 GPU 负载
- 全浏览器兼容(Chrome / Safari / Firefox / Edge / iOS / Android 现代版本),无需任何 polyfill
常见问题
Q: 模糊过渡在低端手机上会掉帧吗? 模糊滤镜虽由 GPU 加速,但低端机连续大范围 blur 仍可能掉帧。建议把模糊半径控制在 16px 内、避免整屏元素同时模糊,本组件演示的规模无压力。
Q: 模糊和淡入一起用会看不清吗? 不会。本组件把模糊、透明度、位移三者叠加,入场过程「先雾后清」,观感反而更聚焦;如果只要其中一种,删掉对应属性即可。
Q: 为什么模糊切换时文字边缘会闪一下? 这是部分浏览器对 blur 过渡的合成瑕疵。可给 .sb-item 加 will-change: filter 提前建层,或把动画时长加长到 0.7s 以上缓解。
Q: 可以商用吗? 可以。本组件为粤喵自研原创代码,免费商用无需署名,无任何协议限制。
许可与来源
- 许可证:自研原创 —— 粤喵自研原创,可免费用于个人与商业项目,无需署名。查看来源公示与许可清单
- 来源:粤喵团队原创自研(从效果思路到代码实现均为独立完成,未直接复制第三方代码)
- 首次发布: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(缓动曲线)等属性即可,代码中有注释说明。