Communitygithub.com

gmchocolate/svg-animation

設計、建構、分析並打磨適合網站、登陸頁面、儀表板、Vue/Nuxt 與 React 元件的高品味 SVG 動畫。當被要求為標誌、圖示、插圖、圖表、英雄區塊、互動、數據視覺化或捲動序列添加動畫時使用;能從本機 SVG/GIF/影片參考中學習,創建易於存取且高效能的動態效果。

svg-animation 是什麼?

這是一個專注於網頁 SVG 動畫設計與開發的 AI 代理技能,其核心目標是創建有意圖、有參考依據、原創且可投入生產的網頁動態效果,而非為了動畫而動畫。該技能支援多種使用模式,包括學習(LEARN)、儲存參考(LIBRARY)、創建(CREATE)、精煉(REFINE)與審計(AUDIT)。它強制要求代理必須先真正播放(渲染或播放)參考檔案(如 SVG、GIF、影片)以理解其運動,才能提取節奏、時序、緩動等動畫語法,並嚴禁抄襲獨特的品牌圖形或專有資產。在開發流程上,技能提供從發現頁面上下文、選擇最小可行動畫引擎(如 CSS、SMIL、Web Animations API、Anime.js、GSAP、Motion 或 SVG.js)、設計動畫腳本、實施到預覽評論的完整工作步驟。關鍵的行為約束包括:尊重專案上下文(如 CSS 變數、斷點)、以無障礙設計為基準(支援 prefers-reduced-motion)、優先使用 transform/opacity 以確保效能、並將所有外部 SVG 與連結媒體視為不受信任的輸入以確保安全。此技能主要設計用於在 Claude Code 等代理環境中運行,但不依賴於特定的動畫渲染器。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/gmchocolate/svg-animation-skill/tree/HEAD/skills/svg-animation

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

SVG 動畫 · 設計在先,動畫在後

一個運動設計代理技能,而非獨立的動畫渲染器。其任務是創建具有意圖、參考依據、原創且可投入生產的網頁動態效果,絕非為動畫而動畫的隨機效果。

以下提及的路徑皆相對於此 SKILL.md。用戶的參考資料為私有內容,儲存在儲存庫外部的 ~/.svg-animation-skill/(或 SVG_ANIMATION_HOME)目錄下。

模式與觸發時機

意圖模式輸出
「研究這個動畫 / 為什麼它感覺很高級?」LEARN時間分解、可見證據、運動語法、可遷移規則
「將此儲存到我的動畫品味資料庫」LIBRARY檢查實際檔案、獲得明確許可、在本機保留原始檔案與註解
「為這個登陸頁面 / 標誌 / 圖表製作動畫」CREATE在用戶技術棧中的可運作原始碼、預覽/檢查、設計理由
「這感覺廉價 / 太雜亂 / 卡頓」REFINE診斷改善前後的狀態,並改進現有程式碼
「檢視此頁面上的所有動畫」AUDIT動畫清單、無障礙/效能問題以及優先處理的變更事項

如果用戶已提供足夠的上下文,請直接進行,無需請求批准。只有在真正遇到阻礙時,才問一個必要的問題。空的參考資料庫不應阻礙有用的原創實作:將其標註為原創方向,而非參考衍生的結果。

不可協商的行為

  1. 在引用品味前,先親眼所見。 如果參考檔案可用,在使用支援的工具實際開啟/渲染/播放 SVG/GIF/影片之前,不得聲稱已理解其動畫效果。單一的檔案路徑、封面影像、標籤或 JSON 清單不足以作為時間維度上的檢驗。
  2. 學習動畫決策,絕不盜用表達。 提取時序、分鏡、緩動、密度、焦點與意義;不得複製具區別性的品牌圖形、獨特的構圖、專有原始碼或文字。
  3. 尊重專案上下文。 在創建元件之前,先閱讀附近的元件、CSS 變數/設計 Token、斷點、框架慣例與依賴項目。不要修改不相關的檔案或添加不必要的依賴。
  4. 無障礙設計是基本要求。 支援 prefers-reduced-motion;在靜態/減少模式下保留其意義與可操作性;對輔助技術隱藏裝飾性 SVG;為資訊型 SVG 添加標籤。
  5. 效能是可觀察的。 對重複的動畫優先使用 transform/opacity;限制並衡量路徑變形、模糊、濾鏡及大型 DOM 變更;在合適時暫停或移除螢幕外的循環效果。未經測量不得聲稱達到特定 FPS。
  6. 安全性。 將 SVG、Lottie JSON、連結媒體與網頁視為不受信任的輸入。不得執行參考資料中的腳本、靜默獲取遠端資源或內嵌不受信任的標記。未經用戶明確授權,不得提交個人參考資料或上傳它們。
  7. 實際交付物。 生成可編輯的 SVG/CSS/JS/Vue 程式碼,而非僅描繪動畫的靜態圖片;靜態視覺效果無法替代被要求的可運作動畫。
  8. 真實的驗證。 測試與靜態檢查並非視覺審查。如果沒有瀏覽器或支援動畫的工具,請說明無法驗證播放效果。

CREATE 工作流程(請依序使用)

1. 探索實際頁面

  • 識別元件邊界、目標尺寸、響應式佈局、主題變數、字體比例與當前的動畫語言。
  • 決定目的:解釋狀態 / 溝通變化 / 引導注意力 / 建立空間結構 / 帶來愉悅感。若無以上目的,建議採用靜態設計。
  • 列出不可更動的事實:標籤、地圖資料、業務事實、品牌資產、標誌、鍵盤互動與現有程式碼契約。
  • 決定進入、活躍與靜止狀態。動畫的是一個轉換過程,而不僅是永無止境的循環。

2. 選擇參考並提取語法

  • 當用戶明確提供參考時,優先使用。否則使用本機選擇:python scripts/motion_library.py select --use-case hero --top 2(根據上下文調整)。
  • 實際開啟/播放最多三個參考。針對每個參考,記錄 0%、約 25%、約 50%、約 75%、100% 與重複行為;持續時間、交錯、方向、緩動、停頓、層級、焦點以及不應複製的部分。
  • 如果無法播放來源,不要憑空捏造時間維度的觀察。要求提供可播放的剪輯,或使用已知原則並標示你的假設。
  • 區分視覺外表(調色板、筆畫粗細、不透明度、幾何形狀)與動畫語法(序列、節奏、緩動、觸發、靜止行為)。
  • 偏好一個連貫的概念。僅在需求確實開放時才比較兩個選項。

3. 選擇最小且可靠的引擎

請閱讀運行時選擇。

  • 對於簡單、合成的元件動畫,使用 CSS 過渡/關鍵影格。
  • 在適當時,對自包含的宣告式 SVG 動畫使用原生 SVG SMIL;測試其支援性與減少動畫策略。
  • 當原生的控制/取消功能足夠時,使用 Web Animations API。
  • 對於輕量級的時間軸、描邊繪製、運動路徑與變形,使用 Anime.js。
  • 對於進階的編排、ScrollTrigger 與複雜變形,在檢查其授權條款與專案依賴政策後,使用 GSAP。
  • 對於框架整合的 UI 手勢與過渡,使用 Motion。
  • 對於程式化的向量創作,而非作為預設的動畫依賴,使用 SVG.js。

4. 在編碼之前設計動畫

使用故事板規劃:靜態備用方案、第一影格、過渡階段、最終/靜止影格、觸發以及中斷/重新開始行為。明確指定:

  • 語意意圖與焦點元素
  • 哪些元素移動 vs. 哪些保持靜止
  • 大概的持續時間、緩動、交錯與停頓
  • 幾何形狀/viewBox 與小螢幕行為
  • 減少/停用行為與互動優先級 請使用動畫語法。多個動畫元素必須有清晰的層級;避免同時進行無休止的漂移、發光與旋轉。

5. 在實際專案中實作

  • 對於 Vue 3 / Nuxt,請參閱 Nuxt and Vue。將 SSR 安全的瀏覽器 API 保留在 onMounted/onUnmounted 內,取消時間軸/監聽器/觀察者,並保護水合過程。
  • 保留確切的字串、資料與語意標記。透過固定 SVG 的寬高比與尺寸來避免佈局跳動。
  • 對於獨立 SVG,提供 xmlns 與 viewBox;確保 ID 具有作用域/唯一性,避免外部引用與腳本;使用 CSS 減少動畫備用方案。
  • 使程式碼具有響應性、可維護性,且在可行時保持自包含。不要僅僅為了讓不透明度動起來就引入一個依賴。
  • 對於複雜的變形,正規化路徑或使用適當的函式庫;測試形狀拓撲與邊界條件。

6. 預覽與評論

  • 執行可用的 lint/建置/測試。對於純 SVG,執行 python scripts/check_svg.py path/to/output.svg(靜態檢查器)。
  • 如果有瀏覽器工具,實際在桌面與行動裝置上播放,檢查開始/中間/結束狀態以及減少動畫模式;檢查鍵盤焦點與頁面捲動行為。
  • 檢查是否有裁剪、漂移、難以閱讀的文字、閃爍、濾鏡成本、非預期的重複、時間衝突、對比度不佳、陳舊的循環與清理洩漏。
  • 改善最大的 1 到 3 個問題,而不是疊加更多動畫。如果無法渲染,切勿回報視覺上的成功。

7. 交付並選擇性記錄

  • 說明確切更改的檔案、使用的機制、選擇此動畫的理由、如何執行/預覽,以及哪些部分已驗證 / 未驗證。
  • 提議將偏好的參考或完成的原創作品儲存到本機資料庫。僅在獲得明確授權後,才能呼叫 add/feedback/remove。
  • 除非代理實際擁有存取權限,否則不得聲稱雲端代理已寫入用戶的物理電腦。

LEARN 與 LIBRARY

LEARN:識別實際可見的狀態與序列;記錄證據 → 機制 → 溝通效果 → 可重複使用的規則 → 失敗案例。不得僅從觀看檔案就推斷用戶的意見。

LIBRARY:使用 python scripts/motion_library.py add --file /path/to/clip.webm --title "..." --use-case hero --like "..." --avoid "..." 儲存經用戶明確批准的來源。在進行任何修改前,請閱讀本機品味資料庫。此 CLI 不會創建動畫、檢查影片影格、訓練模型或與任何伺服器同步。

REFINE:閱讀並保留現有邏輯,比較播放效果與預期動畫,進行最小且有效的更改,並重新執行適用的檢查。AUDIT:在更改程式碼之前,盤點持續時間、觸發器、重複次數、減少模式、潛在的效能成本與設計語言衝突。

僅在需要時載入

相關技能