CSS如何制作一个类似雷达脉冲的扩散圈_通过多个圆圈的缩放与淡出css

2次阅读

用多个div同心圆接力动画实现雷达脉冲效果:每圈独立scale+opacity动画,延迟错开,transform-origin设center,关键帧分0%、60%、100%三段并配cubic-bezier缓动,父容器relative定位,子元素absolute居中。

CSS如何制作一个类似雷达脉冲的扩散圈_通过多个圆圈的缩放与淡出css

怎么用纯css实现雷达脉冲的扩散圈效果

核心思路是:用多个 div 圈层,各自独立做 scale + opacity 动画,起始时间错开,形成连续扩散感。不是靠一个圆渐变放大,而是“多层同心圆接力播放”。

为什么必须用多个元素而不是单个动画循环

单个元素反复缩放+淡出会卡顿、边缘发虚(尤其是 safari),且无法模拟真实雷达那种“一圈刚淡出、下一圈已扩到半途”的叠加强度。多层方案能规避重绘抖动,也更容易控制每圈的持续时长和衰减曲线。

  • 每圈动画时长建议设为 1.2s–1.6s,太短显得急促,太长失去脉冲感
  • 至少用 3 个圈,推荐 4–5 个:太少断层明显,太多增加渲染负担
  • 所有圈的 transform-origin 必须设为 center,否则缩放中心偏移

CSS动画关键参数怎么配才不糊、不跳

重点在 @keyframes 的中间帧和缓动函数。不能只写 0% { scale: 0; opacity: 1 }100% { scale: 3; opacity: 0 },那样会线性拉伸,边缘模糊且节奏生硬。

  • 起始帧:0% { transform: scale(0.1); opacity: 0.8; }(避免从 0 开始触发浏览器亚像素渲染)
  • 峰值帧(约 60%):60% { transform: scale(1.8); opacity: 0.4; }(视觉最饱满处)
  • 结束帧:100% { transform: scale(2.6); opacity: 0; }(留点余量,避免突然裁切)
  • 动画函数用 cubic-bezier(0.2, 0.8, 0.3, 1),比 ease-out 更利落

实际部署时容易被忽略的坑

最常栽在定位和层级上——脉冲圈一动就飘走或被遮住,不是动画问题,是布局没锁死。

立即学习前端免费学习笔记(深入)”;

  • 父容器必须设 position: relative,所有圈用 position: absolute + top: 50%; left: 50%; transform: translate(-50%, -50%)
  • 每个圈加 will-change: transform, opacity(仅对 chrome/edge 有效,但能稳帧率)
  • 别用 border-radius: 50% 做圆——用 width/height 相等 + border-radius: 50%,否则缩放时 Safari 可能失圆
  • 如果嵌在 SVG 里,得用 foreignObject 包裹,直接塞 div 会失效

复杂点在于,每圈的动画延迟要随层数递增,但延迟值不能简单等差——第二圈延 0.3s、第三圈延 0.55s、第四圈延 0.75s 才自然。这个节奏得调,调不好就像打嗝。

text=ZqhQzanResources