前言

动画是提升用户体验的利器,但大型动画库往往意味着臃肿的依赖和陡峭的学习曲线。如果你只是想给页面加一点”呼吸感”,这些小而美的 SVG 动画库可能是更好的选择。

今天分享 3 个 Stars 不足 1000 但质量上乘的 SVG 动画项目,它们都遵循一个原则:做一件事,做到极致


1. react-wavify ⭐ 359

🔗 GitHub: https://github.com/woofers/react-wavify
🌐 在线演示: https://jaxs.onl/react-wavify/

给页面加点”浪”

这是一个专注做波浪动画的 React 组件。没错,它只做波浪——但能做出非常优雅的波浪效果。

极简的使用方式

import Wave from 'react-wavify';

function App() {
  return (
    <Wave
      fill="#f79902"
      paused={false}
      options={{
        height: 20,
        amplitude: 20,
        speed: 0.15,
        points: 3
      }}
    />
  );
}

核心亮点

  • 🌊 纯 SVG 渲染 - 任意缩放都清晰,无锯齿
  • 🎨 完全可控 - 波高、振幅、速度、波浪数量自由调节
  • 🐛 超轻量 - 源码简洁,无冗余依赖
  • ♻️ MIT 协议 - 商用无忧

适用场景

  • 着陆页的底部装饰
  • 音频可视化(配合 Web Audio API)
  • 海洋/水相关主题的网站
  • 作为背景增加页面层次感

2. svg-text-animate ⭐ 278

🔗 GitHub: https://github.com/oubenruing/svg-text-animate
🌐 在线演示: https://oubenruing.github.io/svg-text-animate/

让文字”写”出来

这个库能把任意文字转换成SVG 路径描边动画。想象一下:页面加载时,标题像被一支隐形的手写出来——优雅又吸睛。

使用方法

<!-- 引入库 -->
<script src="https://unpkg.com/svg-text-animate@latest/dist/svg-text-animate.min.js"></script>

<!-- 定义容器 -->
<div id="container"></div>

<script>
  // 初始化
  const textAnimate = new SVGTextAnimate();
  
  // 设置字体并播放动画
  textAnimate.setFont({
    path: './fonts/your-font.ttf'  // 支持自定义字体
  }).then(() => {
    textAnimate.create('Hello World', '#container');
  });
</script>

核心亮点

  • ✍️ 真实的描边动画 - 基于 SVG stroke-dasharray/stroke-dashoffset 实现
  • 🔤 支持自定义字体 - 不限于系统字体,发挥空间更大
  • ⚙️ 丰富配置项 - 动画时长、缓动函数、填充颜色都可调
  • 🎯 零依赖 - 原生 JavaScript,任何地方都能用

动画原理简述

// 核心思路其实非常巧妙:
// 1. 将文字转为 SVG path
// 2. 获取 path 的总长度
// 3. 设置 stroke-dasharray = 总长度
// 4. 设置 stroke-dashoffset = 总长度(隐藏)
// 5. 动画将 offset 减小到 0(显示)

这是 SVG 动画的经典技巧,svg-text-animate 把它封装得干净利落。

适用场景

  • 品牌 Logo 的入场动画
  • 活动页的主题标题
  • 作品集网站的个人签名
  • 任何需要”手写感”的展示

3. pacman-contribution-graph ⭐ 90

🔗 GitHub: https://github.com/abozanona/pacman-contribution-graph
🌐 在线演示: https://abozanona.github.io/pacman-contribution-graph/

把你的贡献图变成游戏

这可能是今天最有趣的项目。它将 GitHub 的贡献图(contribution graph)变成了吃豆人游戏的动画!

效果展示

想象一下:你的 GitHub 主页上,一个黄色的小吃豆人在绿色的贡献方格间穿梭,吃掉代表你代码贡献的”豆子”——这就是 pacman-contribution-graph 能做到的。

集成方式

项目提供了 GitHub Actions 工作流,全自动生成:

# .github/workflows/pacman.yml
name: Generate Pacman Animation
on:
  schedule:
    - cron: "0 0 * * *"  # 每天自动更新
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: abozanona/pacman-contribution-graph@main
        with:
          github_user_name: ${{ github.repository_owner }}

核心亮点

  • 🎮 创意满分 - 把枯燥的数据变成有趣的动画
  • 🤖 全自动 - GitHub Actions 每日更新
  • 🎨 SVG 输出 - 轻量、高清、可嵌入
  • 🛠️ 易于定制 - 调整速度、颜色、路径算法

项目背后的思考

这个项目的有趣之处在于,它展示了数据可视化的另一种可能——不只是图表,还可以是叙事、是游戏、是艺术。

GitHub 贡献图本质上是时间序列数据,pacman-contribution-graph 用游戏语言重新诠释了它,让人会心一笑的同时,也记住了你的开源活跃度。

适用场景

  • 个性化的 GitHub 主页
  • 展示开源贡献的创意方式
  • 技术社区的趣味分享

三者的共同之处

特性react-wavifysvg-text-animatepacman-contribution-graph
Stars35927890
核心定位波浪动画文字描边创意可视化
技术基础SVG PathSVG StrokeSVG + GitHub API
框架依赖React
包大小极小极小极小
更新状态维护中非常活跃活跃

这三个项目都体现了小而美的开发哲学:

  1. 单一职责 - 每个库只做一件事,但做到极致
  2. SVG 优先 - 利用 SVG 的矢量特性,确保任何分辨率都清晰
  3. 可定制性 - 提供足够的配置项,让开发者能调出想要的效果
  4. 零负担集成 - 不绑架你的技术栈,随处可用

写在最后

大型动画库如 GSAP、Framer Motion 固然强大,但很多时候我们需要的只是一个简单的波浪、一段优雅的文字入场、一个有趣的个人主页装饰。

这时候,这些小众库的价值就显现出来了:

  • 源码简单,遇到问题时很容易读懂并修改
  • 依赖极少,不会增加打包体积的负担
  • 专注单一问题,API 简洁直观

下次需要给页面加点动画时,不妨先从这些小工具开始。很多时候,克制比复杂更需要智慧


本文是「每日技术精选」系列的一部分,专注于发掘 star < 1000 的优质开源项目。