Communitygithub.com

Empro Labs 動畫技能

設計並建構網頁 UI 動態效果(微互動、元件與頁面轉場、載入器、滾動顯示與滾動連結效果),可使用 CSS、Web Animations API 或 GSAP。先撰寫 ANIMATION.md 動畫規格,取得使用者核准後再產生遵循 prefers-reduced-motion 與效能預算的動畫程式碼。

Empro Labs 動畫技能 是什麼?

Empro Labs 動畫技能是一個專為 AI 編碼代理(如 Claude Code、Cursor、Codex)設計的專業技巧,用於在網頁專案中系統化地設計與實作 UI 動畫。其主要工作流程分為四個階段:A 階段理解輸入並確認動畫個性與互動層級;B 階段撰寫詳細的 ANIMATION.md 動畫規格文件,包含動畫標記、元件行為、效能預算與無障礙規範;C 階段根據規格實作動畫程式碼,並強調使用動畫標記、僅對 transform 與 opacity 等低成本屬性進行動畫處理;D 階段則透過靜態分析腳本與瀏覽器工具進行稽核,確保符合所有紅線項目。此技能支援 CSS、Web Animations API 與 GSAP,並可根據專案框架自動選擇最佳工具,適用於微互動、頁面轉場、滾動動畫等場景。所有動畫程式碼從第一版即納入 reduced-motion 支援,並嚴格遵守效能預算與無障礙標準。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/aj9599995/Empro-Lab-Animation-Skill/tree/main

在你喜歡的 AI 中提問

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

說明文件

Empro Labs 動畫技能 是做什麼的?

網頁動態設計技能。兩個步驟:先撰寫動畫規格(ANIMATION.md),再撰寫程式碼。

ANIMATION.md 是儲存在專案中的檔案。可手動編輯、在其他專案中重複使用,並能被其他工具讀取。

此檔案中的路徑是相對於技能資料夾(~/.claude/skills/empro-labs-animation-skill/)。執行腳本時請使用絕對路徑。

請求

來自斜線命令的使用者請求:

$ARGUMENTS

如果上方請求為空,請詢問一個問題:什麼東西應該移動,以及移動到哪裡?然後開始階段 A。

核心流程

階段 A  理解輸入  ──→  階段 B  撰寫 ANIMATION.md(使用者核准)  ──→  階段 C  實作  ──→  階段 D  稽核

啟動檢查(依此順序)

  1. 專案中是否有 ANIMATION.md?→ 依使用者要求,重複使用、編輯或重建它。
  2. 是否有來自網頁設計技能的 DESIGN.md?→ 繼承其顏色、字型與樣式方向。保持動畫與其一致。
  3. 是否有動畫標記(--motion-* 變數或動畫檔案)?→ 重複使用它們。不要發明新數值。
  4. 是否已有動畫程式碼?→ 先執行 python scripts/analyze_motion.py <project> --inventory,以便在提出變更前了解現有內容。
  5. 以上皆非 → 階段 A。

階段 A:理解

輸入可以組合使用:

輸入處理方式
參考網址執行 python scripts/capture_motion.py --url [URL] --output ./motion-capture。讀取 capture.json 以取得實際持續時間、緩動函數、動畫屬性與滾動連結效果。使用 top.png 作為情緒參考。
動畫的影片或螢幕截圖描述觸發條件、大約持續時間與緩動感覺。與使用者確認數值。
關鍵字("敏捷"、"電影感")將它們與 references/motion-personalities.md 中的個性配對。
品牌名稱("像 Linear")如果該網站可達,則擷取即時網站。若不可達,請要求提供參考網址。不要憑記憶猜測品牌動畫。
現有程式碼執行庫存腳本並保留可運作的部分。

A1. 個性(最多問兩個問題)

  • 感覺: 平靜、敏捷、俏皮或電影感?
  • 頁面類型: 內容密集型(動畫不干擾內容)或展示型(動畫可主導)?

從 references/motion-personalities.md 中顯示一兩個候選項目,每個附上一行理由。由使用者確認。

A2. 互動層級(必要,不可跳過)

請參閱 references/interaction-tiers.md。

層級體驗工具
L1 微互動懸停、焦點、按壓、切換、小型狀態變更僅 CSS 轉場
L2 編排動畫進入與離開、階梯列表、模態框、抽屜、路由變更、載入器CSS 關鍵影格、Web Animations API 或 GSAP 時間軸
L3 滾動故事滾動驅動的顯示、固定、視差、由時間軸驅動的區塊GSAP + ScrollTrigger,或 CSS 滾動驅動動畫搭配備援方案

L3 每頁上限為兩個固定區塊。每個頁面區塊應在規格中標明其層級。

A3. 技術棧

檢查 package.json 與框架(純 HTML、React、Vue、Svelte、Next.js)。使用 references/tooling.md 選擇工具。預設:CSS 與 Web Animations API。僅在 L3 或複雜時間軸時才加入 GSAP。

階段 B:撰寫 ANIMATION.md

遵循 references/animation-md-template.md。十個章節:

  1. 動畫個性與原則
  2. 動畫標記(持續時間、緩動函數、距離)
  3. 編排庫存表(表格:元素、觸發條件、屬性、持續時間、緩動函數、延遲、減少動畫備援方案)
  4. 元件動畫(預設、懸停、焦點可見、啟用、停用、進入、離開)
  5. 滾動行為
  6. 頁面與路由轉場
  7. 效能預算
  8. 無障礙
  9. 注意事項(至少 8 項,其中至少 5 項為禁止事項)
  10. 依賴項目

向使用者顯示摘要並等待核准。然後將 ANIMATION.md 儲存在專案根目錄。

階段 C:實作

  1. 到處使用標記。 每個持續時間與緩動函數都是變數,例如 var(--motion-duration-base)。元件內不得出現魔術數字。
  2. 僅對低成本屬性進行動畫處理。 優先使用 transform 與 opacity。可在小型元素上使用 clip-path 與 filter。除非 ANIMATION.md 中記錄了例外狀況並附有理由,否則絕對不要對 width、height、top、left、margin 或 padding 進行動畫處理。
  3. 減少動畫支援是第一版的一部分,而非之後的修補。 移除移動,但保留狀態變更。在減少動畫模式下,距離標記歸零,templates/motion-tokens.css 中的 prefers-reduced-motion 區塊展示了此模式。
  4. 當專案尚無動畫層時,使用入門檔案: templates/motion-tokens.css 與 templates/reveal.js。
  5. 循環需要退出方式。 任何 infinite 動畫在減少動畫模式下應停止或簡化。任何運行超過五秒的循環都必須有暫停控制。
  6. 清理 JavaScript。 在卸載時銷毀 GSAP 時間軸與 ScrollTrigger(使用 gsap.context() 或 useGSAP)。中斷觀察器並移除監聽器。
  7. 將動畫集中在一處。 將標記放在一個檔案中,並將配方放在小型模組中。不要將時間值分散在各個元件中。

階段 D:稽核

  1. 執行靜態稽核:python scripts/analyze_motion.py <project> --strict。修正所有錯誤。檢視所有警告,並在 ANIMATION.md 中修正或說明理由。
  2. 執行瀏覽器檢查:
    • 開啟減少動畫模式(開發人員工具 → 算繪 → prefers-reduced-motion: reduce)。確認沒有任何移動殘留,且內容仍可見。
    • 限制 CPU(4 倍)並在動畫播放時錄製「效能」面板。尋找過長的影格。
    • 檢查手機寬度(390 像素)。尋找由動畫元素造成的水平溢出。
  3. 逐一檢查 references/quality-checklist.md。
  4. 回報哪些項目通過、哪些失敗以及已修正哪些項目。

紅線(每項都必須通過)

  • ANIMATION.md 中的每個動畫都必須有減少動畫的備援方案。
  • 僅對 transform、opacity 與記錄的例外狀況進行動畫處理。
  • 所有持續時間與緩動函數都來自標記。
  • 每個 infinite 循環都必須尊重減少動畫,且任何超過五秒的循環都必須有暫停控制。
  • 任何內容的閃爍頻率不得超過每秒三次。
  • 互動回饋必須在 100 毫秒內出現。微動畫應在 250 毫秒或以下。進入與路由轉場應在 500 毫秒或以下。
  • 僅懸停回饋必須有鍵盤焦點狀態與觸控等效方案。
  • 在寬度 600 像素或以下,任何動畫元素不得造成水平捲動,且固定區塊應停用或簡化。
  • JavaScript 動畫必須在卸載時清理。

參考索引

僅讀取目前階段所需的檔案。不要全部載入。

檔案內容讀取時機
references/animation-md-template.mdANIMATION.md 輸出模板(10 個章節)階段 B
references/motion-principles.md為何以及何時進行動畫處理、時間與緩動規則階段 A 與 B
references/interaction-tiers.mdL1、L2 與 L3 層級定義及程式碼模式階段 A2 與 B
references/motion-personalities.md四種個性預設組合,附帶標記數值階段 A1 與 B
references/tooling.mdCSS 與 WAAPI 與 GSAP 與 Motion 與 View Transitions 與 Lottie階段 A3
references/component-recipes.md按鈕、卡片、手風琴、模態框、抽屜、提示、分頁標籤、載入器階段 C
references/gsap-recipes.mdGSAP 時間軸、ScrollTrigger、matchMedia、React 清理階段 C(僅 GSAP)
references/scroll-patterns.md顯示、進度條、黏性堆疊、視差、水平滾動階段 B(滾動)與 C
references/performance.md影格預算、合成器友善規則、行動端降級階段 B 與 D
references/accessibility.md減少動畫、WCAG 動畫標準、前庭觸發因素階段 B 與 D
references/quality-checklist.md100 點稽核查核表階段 D

腳本

腳本用途需求
scripts/analyze_motion.py對專案的 CSS 與 JS 進行靜態稽核。找出布局動畫、transition: all、無限循環、長期持續時間以及缺少減少動畫處理的情況。--inventory 列出現有的時間值。Python 3(僅標準函式庫)
scripts/capture_motion.py記錄即時網址上已宣告與正在執行的動畫、捲動頁面,並檢查在減少動畫模式下哪些仍會執行。寫入 capture.json 與 top.png。Python 3、pip install playwright、python -m playwright install chromium

兩個腳本都接受 --help。

模板

檔案用途
templates/motion-tokens.css標記變數、基礎關鍵影格、顯示規則與減少動畫區塊。複製到專案中。
templates/reveal.js無依賴的滾動顯示,使用 IntersectionObserver 且尊重減少動畫。

語言

以使用者的語言撰寫 ANIMATION.md 與摘要。保持 CSS、JavaScript 與標記名稱以英文呈現。

備援鏈

  • 擷取腳本失敗(沒有 Playwright,或網站封鎖瀏覽器)→ 要求提供螢幕截圖或簡短的螢幕錄影,並根據該描述建構。
  • 參考資料使用了您無法識別的動畫函式庫 → 說明情況,並詢問要比照感覺還是確切動畫。
  • 沒有任何輸入 → 詢問一個關於感覺的問題,然後使用平靜個性。

相關技能