Communitygithub.com

phido0410/animejs

Anime.js v4 動畫(動畫、建立時間軸、交錯、SVG 可繪圖/形變/運動路徑、建立作用域、實用工具)。當使用者要求 Anime.js / animejs,或需要輕量級 JS 動畫來操作 DOM、SVG、CSS 變數或純 JS 物件時使用。v4 的 API 與 v3 不同——沒有預設匯出的 anime()。

animejs 是什麼?

此技能提供 Anime.js v4 動畫函式庫的完整參考與實作指引。Anime.js 是一款輕量級 JavaScript 動畫引擎,可用於操作 DOM、SVG、CSS 變數以及純 JavaScript 物件。v4 版本引入了全新的模組化 API,使用具名匯出(如 animate、createTimeline、stagger)取代了 v3 的預設 anime() 函式,因此過往的教學可能會失效。此技能詳細說明了 animate 函式的用法(包括目標選擇、屬性簡寫、from/to 陣列、循環與交替設定)、時間軸建立與位置控制、SVG 繪製與形變支援(draw、morphTo、createMotionPath),以及播放控制(暫停、跳轉、復原)。此外,也提供了在 React 中與 createScope 搭配使用的作用域管理範例,以及在 Remotion 影片框架中如何正確控制動畫時間軸(手動跳轉而非自動播放)。整體來說,此技能是開發者在使用 Anime.js v4 進行網頁或影片動畫開發時的實用參考工具。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/phido0410/claude-video-skills/tree/HEAD/skills/animejs

在你喜歡的 AI 中提問

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

說明文件

Anime.js v4

已確認 2026-10:animejs 4.5。

npm i animejs
import { animate, createTimeline, stagger, svg, utils, createScope } from 'animejs'

v3 → v4(舊版教學使用 v3)

v3v4
anime({ targets, ... })animate(targets, { ... })
easing: 'easeOutQuad'ease: 'outQuad'('inOutExpo'、'inOut(3)'、……)
anime.timeline()createTimeline()
direction: 'alternate'alternate: true
update, complete, beginonUpdate, onComplete, onBegin

持續時間與延遲單位為毫秒(GSAP 使用秒)。

animate

animate('.square', {
  x: 320,                       // translateX 的簡寫
  rotate: { from: -180 },
  opacity: [0, 1],              // [from, to]
  duration: 1250,
  delay: stagger(65, { from: 'center' }),
  ease: 'inOutQuint',
  loop: true,
  alternate: true,
})

目標:CSS 選取器、元素、或純物件(animate(obj, { value: 100, onUpdate: () => draw(obj.value) }))。

時間軸

const tl = createTimeline({ defaults: { duration: 600, ease: 'outExpo' } })
tl.add('.title', { opacity: [0, 1], y: [40, 0] })
  .add('.sub',   { opacity: [0, 1] }, '-=300')       // 前一段結束前 300 毫秒
  .add('.dot',   { scale: [0, 1], delay: stagger(80) }, '<<') // 與前一段開始同時

位置:100 絕對毫秒 · '+=100' / '-=100' 相對於前一段結束 · '<' 前一段結束 · '<<' 前一段開始 · '<<+=250' · 'Label'(用 tl.label('Label') 設定) · stagger(10)。

SVG

animate(svg.createDrawable('.line'), { draw: ['0 0', '0 1'], duration: 2000 }) // 筆觸繪製,數值 0–1「起始 結束」
animate('#shapeA', { d: svg.morphTo('#shapeB'), duration: 800 })                // 將形狀 A 形變為 B
animate('.car', { ...svg.createMotionPath('#road'), duration: 4000 })            // 沿著路徑運動(x, y, rotate)

播放 / 拖曳

autoplay: false,然後使用 .play()、.pause()、.restart()、.reverse()、.seek(ms)、.complete()、.cancel()、.revert()(復原所有內聯樣式)。

React

const root = useRef(null)
useEffect(() => {
  const scope = createScope({ root }).add(() => {
    animate('.box', { x: 200 })     // 選取器限定在 root 內
  })
  return () => scope.revert()
}, [])

用於影片

Anime.js 使用自己的時鐘。在 Remotion 中,以暫停狀態建立動畫,並逐影格跳轉——永遠不要讓它自動播放:

const frame = useCurrentFrame()
const { fps } = useVideoConfig()
const tl = useRef(null)
useLayoutEffect(() => {
  tl.current = createTimeline({ autoplay: false }).add('.title', { y: [40, 0], opacity: [0, 1] })
  return () => tl.current.revert()
}, [])
useLayoutEffect(() => { tl.current.seek((frame / fps) * 1000) }, [frame, fps])

簡單移動偏好使用 Remotion 自己的 interpolate / spring;當 Anime.js 的 SVG 輔助功能(繪製、形變、運動路徑)或交錯效果能大幅簡化工作時,再考慮使用它。

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

相關技能