You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何沿SVG路径长度实现线性填充动画,模拟形状绘制效果?

实现SVG逐步绘制动画(类似三星Galaxy S标志效果)

嘿,我来帮你搞定这个SVG逐步绘制的动画效果,和你提到的三星S标志动画思路完全一致~

核心思路

咱们用CSS的clip-path属性配合动画,通过逐步调整裁剪区域的范围,让SVG形状从局部到完整显示,模拟“被绘制出来”的过程。

具体实现步骤

1. 预处理你的SVG

确保你的SVG是单一的连续细窄形状(如果是多个分散路径,建议合并成一个,或者给每个路径单独加动画),这样裁剪动画的效果会更连贯。

2. 核心动画代码

参考你给出的示例,我们可以根据SVG的方向调整inset()参数:

/* 定义动画关键帧 */
@keyframes drawSVG {
  0% {
    /* 初始状态:只显示顶部/左侧小部分,其余被裁剪 */
    clip-path: inset(0 0 100% 0); /* 垂直方向:从下往上逐步显示 */
    /* 要是你的SVG是水平方向,就改成 inset(0 100% 0 0),从左往右显示 */
  }
  80% {
    /* 动画后半段:完全显示,留一段停顿时间让效果更自然 */
    clip-path: inset(0 0 0 0);
  }
  100% {
    clip-path: inset(0 0 0 0);
  }
}

/* 给SVG应用动画 */
svg {
  animation: drawSVG 2s ease-in-out forwards;
  /* 2s是动画时长,ease-in-out是缓动效果,forwards让动画停在最后一帧 */
}

3. 适配你的SVG调整参数

  • 方向适配:水平细窄形状用inset(0 100% 0 0),垂直形状用inset(0 0 100% 0)
  • 节奏调整:修改动画时长(比如3s)或缓动函数(linear是匀速,ease-out是先快后慢)
  • 百分比适配:inset的百分比是相对SVG自身尺寸的,不用手动改像素值,适配性极强

4. 完整示例代码

假设你的SVG是垂直细窄矩形,完整代码如下:

<svg width="20" height="300" viewBox="0 0 20 300" xmlns="http://www.w3.org/2000/svg">
  <rect x="0" y="0" width="20" height="300" fill="#000"/>
</svg>

<style>
@keyframes drawSVG {
  0% {
    clip-path: inset(0 0 100% 0);
  }
  80% {
    clip-path: inset(0 0 0 0);
  }
  100% {
    clip-path: inset(0 0 0 0);
  }
}

svg {
  animation: drawSVG 2.5s ease-out forwards;
}
</style>

额外优化技巧

如果想让动画更生动,可以加一点微小的形变:

@keyframes drawSVG {
  0% {
    clip-path: inset(0 0 100% 0);
    transform: scaleY(0.95);
  }
  80% {
    clip-path: inset(0 0 0 0);
    transform: scaleY(1);
  }
  100% {
    clip-path: inset(0 0 0 0);
    transform: scaleY(1);
  }
}

这样就能完美复刻类似三星Galaxy S标志的逐步绘制效果啦~

内容的提问来源于stack exchange,提问作者nulldev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:41:44