模糊揭示文字(滚动进出视口触发 CSS 源码)

CSSJS 许可:自研原创

模糊揭示文字组件源码:文字从模糊到清晰逐行显现,进出视口自动重新触发,支持手动重播,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每行模糊→清晰的时间
行错峰 --d0 / .18 / .36 / .54s逐行延迟,行数多时按 0.18s 递增
触发阈值0.25舞台进入视口 25% 时触发

兼容性与性能

常见问题

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(缓动曲线)等属性即可,代码中有注释说明。

✍️ 作者与审核