模糊揭示文字(滚动进出视口触发 CSS 源码)
模糊揭示文字组件源码:文字从模糊到清晰逐行显现,进出视口自动重新触发,支持手动重播,IntersectionObserver + CSS 过渡实现,适合落地页引言与内容章节标题。
效果演示(真实可交互)
下方四行文字初始是模糊的虚影,进入视野后从第一行开始依次「对焦」,每行间隔 0.18 秒,伴随轻微上移,形成逐行清晰浮现的叙事节奏。把页面往下滚、让这组文字离开视口再滚回来,它会再次从模糊变清晰;点击「重新播放」按钮可以随时手动重放一遍。
真正的优雅
不是一目了然
而是从模糊之中
慢慢变得清晰
完整代码
HTML 结构:每行一个段落,行内 style 写入错峰延迟:
<div class="br-stage" id="brStage">
<p class="br-line" style="--d:0s">真正的优雅</p>
<p class="br-line" style="--d:.18s">不是一目了然</p>
<p class="br-line" style="--d:.36s">而是从模糊之中</p>
<p class="br-line" style="--d:.54s">慢慢变得清晰</p>
</div>
核心 CSS:模糊与透明是初始态,容器加 .show 后过渡到清晰:
.br-line {
opacity: 0; filter: blur(14px); transform: translateY(10px);
transition:
opacity .9s ease var(--d, 0s),
filter .9s ease var(--d, 0s),
transform .9s ease var(--d, 0s);
}
.br-stage.show .br-line { opacity: 1; filter: blur(0); transform: translateY(0); }
原生 JS:IntersectionObserver 监听舞台进出视口,相交加 .show,离开移除:
const io = new IntersectionObserver((entries) => {
entries.forEach((e) => stage.classList.toggle('show', e.isIntersecting));
}, { threshold: 0.25 });
io.observe(stage);
参数说明
| 参数 | 默认值 | 说明 |
|---|---|---|
| 模糊半径 | 14px | 初始模糊量,越大「对焦」感越强 |
| 过渡时长 | .9s | 每行模糊→清晰的时间 |
行错峰 --d | 0 / .18 / .36 / .54s | 逐行延迟,行数多时按 0.18s 递增 |
| 触发阈值 | 0.25 | 舞台进入视口 25% 时触发 |
兼容性与性能
filter: blur是 GPU 加速的绘制属性,过渡期间浏览器按帧重绘,行数建议控制在 6 行以内- IntersectionObserver 是异步回调,不阻塞滚动主线程;老浏览器可用
scroll事件 +getBoundingClientRect兜底 - 已适配
prefers-reduced-motion:系统开启「减弱动态效果」时直接显示清晰文字,不做模糊动画 - 模糊 + 透明同时过渡,动画结束后
filter归零,不残留合成层
常见问题
Q: 页面打开时文字没有动画直接显示了? 检查舞台是否已在视口内且 IO 已绑定;本组件首次相交即触发,若希望延迟可用 animation-delay 或先加 .paused 类。
Q: 想让整段一起清晰而不是逐行? 把每行的 --d 全部设为 0s 即可,错峰完全由延迟控制。
Q: 模糊动画在低端手机上掉帧? 减小模糊半径到 8px、过渡时长缩短到 .6s,或改用 opacity 单属性渐显。
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(缓动曲线)等属性即可,代码中有注释说明。