網頁開發

Anime.js v4:2026 年 JavaScript 動畫引擎完全指南

Anime.js v4 是熱門 JavaScript 動畫函式庫的全面重寫,提供模組化 ESM 匯入、彈簧物理、時間軸,以及在 3000 個 DOM 元素上維持 60fps 的效能表現。

Anime.js v4:2026 年 JavaScript 動畫引擎完全指南

Anime.js 是由 Julian Garnier 打造的一款輕量級 JavaScript 動畫引擎,為網頁動畫領域貢獻超過十年。2025 年,這個函式庫經歷了史上最重大的轉變:從底層全面重寫為版本 4(v4),將原本單一的 anime() 函式取代為模組化、以 ESM 為優先的 API。截至 2026 年初,Anime.js 在 GitHub 上擁有超過 58,000 顆星,活躍的 npm 發布版本也已推進到 v4.3.6,證明了在 CSS 動畫與 WAAPI 盛行的時代,一套設計良好的動畫函式庫仍能蓬勃發展。

第 4 版不僅僅是增量更新,而是一次理念上的轉變:不再是單一函式包辦所有功能,v4 提供離散、可 tree-shaking 的模組,按名稱匯入即可使用。核心的 animate() 函式取代了舊有的 anime()。參數經過重新命名(value 屬性改為 toeasing 改為 ease),並新增了多項全新系統——透過 createSpring 實現彈簧物理、拖曳互動、SVG 運動路徑、文字分割,以及僅 3 KB 的 WAAPI 整合。最終成果是一個既熟悉又遠比以往強大的函式庫,能夠在 3000 個 DOM 元素上驅動每秒 60 幀的動畫,同時融入現代建置流程而不增加多餘體積。

本指南涵蓋 2026 年使用 Anime.js v4 所需的一切知識:安裝方式、模組化 API、從 v3 升級的重大變更、彈簧物理、時間軸、SVG 與文字動畫、效能特性,以及 v4.2 和 v4.3 系列的最新功能。

最後更新:2026 年 5 月 2 日——基於 animejs.com 官方文件與 juliangarnier/anime 儲存庫。


目錄

  1. Anime.js v4 有哪些新功能?
  2. 從 v3 升級到 v4 的重大變更
  3. 如何安裝與匯入 Anime.js v4?
  4. 核心 API:animate() 函式
  5. v4 的關鍵影格
  6. 合成模式:Replace、Blend 與 None
  7. 使用 createSpring 的彈簧物理
  8. 時間軸與標籤位置
  9. SVG 動畫模組
  10. 使用 splitText 的文字動畫
  11. 拖曳互動
  12. createScope 的框架整合
  13. WAAPI 整合
  14. 引擎設定與效能
  15. 版本歷史:v4.2 與 v4.3
  16. 延伸閱讀與資源

Anime.js v4 有哪些新功能?

直接回答:Anime.js v4 是一次全面重寫,以模組化 ESM 優先的 API 取代了單一的 anime() 函式。它引入了彈簧物理、四種語法的關鍵影格、帶標籤位置的強化時間軸、用於框架綁定的 createScope、createDraggable、SVG 變形與運動路徑、splitText、WAAPI,以及引擎層級的設定——全部在數千個元素上維持 60fps 的效能。

Anime.js v4 於 2025 年 4 月發布,歷經五年的開發,代表了整體架構的大翻新。以下是每個主要新系統的摘要:

功能模組說明
模組化 API核心(animejs可 tree-shaking 的 ESM 匯入:animatestaggercreateTimeline
彈簧物理animejscreateSpring() 含質量、剛度、阻尼、速度、彈跳
關鍵影格核心四種語法:陣列式、持續時間式、百分比式、偏移式
合成模式核心replaceblendnone,用於疊加動畫
強化時間軸animejs/timeline標籤位置(<<<=LABELLABEL+=N)、.call().sync()
createScopeanimejs/scope限域 DOM 查詢與框架元件的自動清理
createDraggableanimejs/draggable拖曳、吸附、輕彈、拋擲,釋放時結合彈簧物理
SVG 模組animejs/svgcreateMotionPathcreateDrawable、變形
文字模組animejs/textsplitText 支援 Intl.Segmenter
WAAPI 整合animejs使用 Web Animations API 的 3 KB 替代方案
引擎設定animejs/engine幀率、精確度、全域預設、隱藏頁面時暫停
CSS 變數核心直接對 CSS 自訂屬性進行動畫
createLayoutanimejs(v4.3)在版面狀態之間自動產生動畫

架構一覽


從 v3 升級到 v4 的重大變更

直接回答:最重要的變更包括:anime() 改為 animate()value 改為 toeasing 改為 ease,以及 alternate 等方向標記從字串值改為布林屬性。

如果您要從 Anime.js v3 遷移,每一個呼叫位置都需要更新。API 表面經過精心簡化與重新命名,以求一致性。下表列出了每個 v3 API 對應的 v4 版本。

參數變更

v3(已棄用)v4(現行)說明
anime({targets: ...})animate(targets, {...})Targets 現在是第一引數
value: 100to: 100關鍵影格屬性重新命名
easing: 'easeOutQuad'ease: 'outQuad'去掉 ease 前綴;省略 easeIn/easeOut
direction: 'reverse'reversed: true布林值,非字串
direction: 'alternate'alternate: true布林值,非字串
endDelayloopDelay為清晰起見重新命名
round: 100modifier: utils.round(2)現在使用修飾函式
autoplay: falseautoplay: false未變更
loop: trueloop: true未變更(迴圈次數 0 = 不迴圈)

回呼變更

v3(已棄用)v4(現行)
beginonBegin
updateonUpdate
changeonRender
completeonComplete
loopBegin / loopCompleteonLoop

模組變更

v3(全域)v4(匯入)
anime.timeline()來自 animejs/timelinecreateTimeline()
anime.stagger()來自 animejsstagger()
anime.path()來自 animejs/svgcreateMotionPath()
anime.setDashoffset()來自 animejs/svgcreateDrawable()
anime.reverse()animation.reverse()(實例方法)
.finished(Promise).then(callback)(實例方法)

如何安裝與匯入 Anime.js v4?

直接回答:執行 npm install animejs@latest,然後以 import { animate, stagger } from 'animejs' 的方式匯入模組。若使用 CDN,可用 ESM 語法從 esm.sh 或 jsDelivr 匯入。

安裝遵循標準的 npm 慣例:

# 安裝最新版本(截至 2026 年 5 月為 v4.3.6)
npm install animejs@latest

# 或安裝指定版本
npm install animejs@4.3.6

模組匯入路徑

Anime.js v4 從 v4.2.0 起支援子路徑匯入。每個模組可單獨匯入,以達到最佳的 tree-shaking 效果:

// 核心——永遠可用
import { animate, stagger, createSpring, createTimer } from 'animejs';
import { waapi } from 'animejs';
import { engine, defaults } from 'animejs';
import { utils } from 'animejs';

// 子路徑匯入(v4.2+)
import { createTimeline } from 'animejs/timeline';
import { createScope } from 'animejs/scope';
import { createDraggable } from 'animejs/draggable';
import { splitText } from 'animejs/text';
import { createMotionPath, createDrawable } from 'animejs/svg';
import { eases, spring } from 'animejs/easings';

CDN 用法

<script type="module">
  import { animate, stagger } from 'https://esm.sh/animejs@4.3.6';

  animate('.box', {
    x: { to: 300 },
    duration: 1000,
    ease: 'outQuint',
  });
</script>

核心 API:animate() 函式

直接回答animate(targets, params) 是主要的進入點。它接受 CSS 選擇器、DOM 元素、NodeList 或 JavaScript 物件作為目標。參數包括 tofromeasedurationdelayloopalternatereversedcompositionmodifier 以及所有回呼函式。

animate() 函式接受兩個引數:目標與參數物件。以下是完整的參數參考:

animate('.element', {
  // 動畫屬性
  x: { to: 300 },           // 單一屬性含 from/to
  rotate: { from: 0, to: 360 }, // 明確指定 from 與 to
  scale: 2,                 // 簡寫(等同於 to: 2)
  backgroundColor: '#ff0',  // CSS 顏色(支援含透明度的十六進位: #ff0a)

  // 時間設定
  duration: 1000,           // 毫秒(預設值因情況而異)
  delay: 200,               // 開始前的延遲
  ease: 'outQuint',         // 緩動函式(參見下方緩動表)
  loop: 2,                  // 額外重複次數(0 = 不迴圈)
  alternate: true,          // 每次迴圈時反向
  reversed: false,          // 從結束值開始
  loopDelay: 0,             // 迴圈之間的暫停(取代 v3 的 endDelay)

  // 渲染
  composition: 'replace',   // 'replace' | 'blend' | 'none'
  modifier: utils.round(2), // 數值後處理
  frameRate: 60,            // 限制 FPS
  playbackRate: 1,          // 速度倍率

  // 回呼
  onBegin: () => {},        // 動畫(含延遲)開始時
  onBeforeUpdate: () => {}, // 每次更新 tick 之前
  onUpdate: (anim) => {},   // 每一幀
  onRender: (anim) => {},   // 數值實際變更時
  onLoop: (anim) => {},     // 每次迴圈結束時
  onPause: (anim) => {},    // 暫停時
  onComplete: (anim) => {}, // 完全結束時
});

緩動函式參考

Anime.js v4 移除了緩動名稱中的 ease 前綴(使用 'outQuad' 而不是 'easeOutQuad')。自訂緩動可以傳入函式或使用 createSpring() 建立。

緩動名稱說明
'linear'恆定速度
'outQuad'緩慢減速
'inQuad'緩慢加速
'inOutQuad'起止皆緩
'outCubic'溫和減速
'inOutCubic'平滑起止
'outQuint'強烈減速
'inOutQuint'明顯緩動
'outExpo'指數級減速
'inOutElastic'兩端彈性效果
'outBounce'結束時彈跳
'outBack'過衝後回彈

v4 的關鍵影格

直接回答:Anime.js v4 支援四種關鍵影格語法:陣列式(每個項目是一個含自訂 to/from 的關鍵影格)、持續時間式、百分比式以及偏移式——讓您精細控制多步驟動畫。

Anime.js v4 引入了四種不同的關鍵影格語法,各自適用於不同的使用情境:

// 1. 陣列式(最靈活——每個元素是一個關鍵影格)
animate('.box', [
  { rotate: { to: 90 }, duration: 500 },
  { rotate: { to: 180 }, duration: 500 },
  { rotate: { to: 360 }, duration: 500 },
]);

// 2. 持續時間式(進度根據持續時間計算)
animate('.box', {
  rotate: {
    0: 0,    // 0ms——開始
    500: 90, // 500ms——關鍵影格 1
    1000: 180, // 1000ms——關鍵影格 2
    2000: 360, // 2000ms——關鍵影格 3
  }
});

// 3. 百分比式(進度相對於總持續時間)
animate('.box', {
  rotate: {
    '0%': 0,
    '25%': 90,
    '50%': 180,
    '100%': 360,
  }
});

// 4. 偏移式(明確偏移量以精確控制時間)
animate('.box', {
  rotate: { to: 360 },
  offset: [0, 500, 1000, 2000],
  value: [0, 90, 180, 360],
});

合成模式:Replace、Blend 與 None

直接回答composition 參數控制重疊動畫的互動方式。replace(預設)在動畫進行中切換數值,blend 在重疊數值之間插值,而 none 則讓動畫獨立運行。

當多個動畫同時影響同一個屬性時,composition 模式決定了行為:

模式行為最適合
'replace'(預設)新動畫立即接管;舊值被覆蓋順序動畫、懸浮轉場
'blend'重疊動畫的數值會一起插值平滑疊加效果
'none'動畫獨立運行,不進行合成計算高效能場景,獨立元素
// Blend 範例——兩個重疊的顏色動畫平滑融合
animate('.box', {
  backgroundColor: { to: '#f00' },
  duration: 1000,
});

animate('.box', {
  backgroundColor: { to: '#00f' },
  duration: 1000,
  delay: 500,
  composition: 'blend', // 透過紫色從紅色插值到藍色
});

使用 createSpring 的彈簧物理

直接回答createSpring() 產生基於物理的緩動函式,參數包含 mass(質量)、stiffness(剛度)、damping(阻尼)、velocity(速度)以及 bounce(彈跳,v4.2+)。將結果傳給 ease 參數,即可獲得自然的物理驅動運動。

彈簧物理帶來了傳統緩動曲線無法比擬的自然運動感。Anime.js v4 將此作為一級功能:

import { animate, createSpring } from 'animejs';

const spring = createSpring({
  mass: 1,        // 越大 = 震盪越慢
  stiffness: 200, // 越高 = 越乾脆
  damping: 10,    // 越高 = 彈跳越少
  velocity: 0,    // 初始速度
  bounce: 0.5,    //(v4.2+)控制彈簧彈跳強度,0-1
});

animate('.ball', {
  translateY: { to: 300 },
  ease: spring,
  loop: true,
  alternate: true,
});

彈簧參數比較

參數範圍效果
mass0.1 – 10質量越小,速度越快、反應越靈敏
stiffness1 – 500越高,回到靜止狀態越乾脆
damping1 – 50越高,震盪消失越快
velocity任意數初始推動方向與力度
bounce(v4.2+)0 – 10 = 無彈跳,1 = 最大彈跳

時間軸與標籤位置

直接回答createTimeline() 使用 add()set() 方法建立序列化動畫。v4 時間軸支援標籤位置(<<<=LABEL_NAME)、明確偏移量(+=500-=200),以及新的方法如 .call().sync().label().set()

v4 的時間軸功能大幅強化。標籤取代了舊的位置系統,提供更易讀的語法:

import { createTimeline } from 'animejs/timeline';

const tl = createTimeline({
  defaults: { ease: 'outQuad', duration: 300 },
  loop: 1,
});

// 使用位置標籤加入動畫
tl.add('.box-a', { x: { to: 200 } })            // 立即開始
  .add('.box-b', { scale: { to: 1.5 } }, '+=200')  // 前一個結束後 200ms
  .add('.box-c', { rotate: { to: 180 } }, '<<')     // 前一個動畫的起點
  .label('midpoint')                                 // 命名標記
  .add('.box-d', { y: { to: 100 } }, 'midpoint')    // 在標籤位置
  .add('.box-e', { opacity: { to: 0 } }, 'midpoint+=500') // 標籤後 500ms
  .play();

時間軸位置語法

位置含義
'+=500'前一個動畫結束後 500ms
'-=200'前一個動畫結束前 200ms
'<<'與前一個動畫的起點對齊
'<='與前一個動畫的結束點對齊
'midpoint'在指定的命名標籤位置
'midpoint+=300'命名標籤後 300ms
stagger(80)使用 stagger 函式的交錯偏移(v4 新增!)

SVG 動畫模組

直接回答:來自 animejs/svg 的 SVG 模組提供 createMotionPath(沿路徑運動)、createDrawable(線條繪製動畫),以及 SVG 形狀之間的內建變形功能——全部由核心 animate() 函式驅動。

SVG 動畫是 Anime.js 的旗艦功能之一。V4 將此組織為專用模組:

運動路徑

import { animate } from 'animejs';
import { createMotionPath } from 'animejs/svg';

const { translateX, translateY, rotate } = createMotionPath('#path');

animate('.car', {
  translateX,
  translateY,
  rotate,
  duration: 3000,
  ease: 'outQuint',
});

createMotionPath 函式現在支援 offset 參數(v4.2.1),用於設定元素相對於路徑的位置。

線條繪製(createDrawable)

import { createDrawable } from 'animejs/svg';

const drawable = createDrawable('#my-path'); // 或 createDrawable('path')

animate(drawable, {
  draw: '0 1', // 從繪製 0% 到 100%
  duration: 2000,
  ease: 'outQuad',
});

形狀變形

// 將一個路徑變形成另一個
animate('#shape', {
  d: { to: '#target-shape' }, // 變形路徑資料
  duration: 1500,
  ease: 'inOutQuint',
});

使用 splitText 的文字動畫

直接回答:來自 animejs/textsplitText() 使用瀏覽器的 Intl.Segmenter API 將文字拆分為字元、單詞和行。它將每個片段包裹在可設定的 HTML 元素中,以便進行逐片段動畫。

文字模組讓文字揭示與動態排版變得簡單直接:

import { splitText } from 'animejs/text';

const split = splitText({
  text: 'Anime.js v4 makes text dance!',
  by: 'word',      // 'char' | 'word' | 'line' | 'all'
  tag: 'span',     // 用於包裹每個片段的 HTML 元素
});

然後您可以單獨對產生的節點進行動畫:

import { animate, stagger } from 'animejs';

animate(split.nodes, {
  translateY: { from: -20, to: 0 },
  opacity: { from: 0, to: 1 },
  duration: 600,
  delay: stagger(50), // 每個單詞/字元交錯出現
  ease: 'outQuad',
});

splitText 選項

選項型別預設值說明
bystring'char''char''word''line''all'
tagstring'span'包裝元素型別
classstring''包裝器的 CSS 類別
wrapstring''行元素的包裝器
linesbooleantrue保留換行
clonebooleanfalse為效果複製節點
includeSpacesbooleanfalse對空白字元也進行動畫
accessiblebooleantrue透過 aria-label 維持無障礙性

拖曳互動

直接回答:來自 animejs/draggablecreateDraggable() 支援拖曳、吸附、輕彈和拋擲互動。它與 createSpring() 搭配使用,提供基於物理的釋放緩動,並支援邊界、吸附目標和拖曳門檻值。

Draggable 是 v4 中新增的模組,提供完整的拖放互動:

import { createDraggable, createSpring } from 'animejs';

const drag = createDraggable({
  el: '.card',
  container: '.stack',
  bounds: { x: [0, 400], y: [0, 400] },
  releaseEase: createSpring({ stiffness: 150, damping: 15 }),
  dragThreshold: 10,   //(v4.2.1+)開始拖曳前的最小像素數
  onStart: () => {},
  onDrag: () => {},
  onDrop: () => {},
  onSnap: () => {},
});

// 後續使用
drag.destroy();

拖曳設定

設定型別預設值說明
elElement必填可拖曳的元素
containerElementdocument.body限制移動範圍的容器
boundsObject{ x: [min, max], y: [min, max] }
releaseEaseFunctioneases.outQuint釋放時的緩動(支援 spring()
dragThresholdNumber0啟動拖曳的最小距離(v4.2.1)
onStartFunction拖曳開始時呼叫
onDragFunction拖曳期間呼叫
onDropFunction釋放時呼叫

createScope 的框架整合

直接回答createScope() 提供一個限域環境,包含 qs()qsa()registerMethod() 等輔助方法,以及用於清理的 revert() 方法——非常適合 Svelte、React 或 Vue 的元件生命週期。

框架整合是 v4 的一級關注事項。createScope() 消除了手動管理查詢選擇器和記憶體洩漏的問題:

import { createScope } from 'animejs/scope';

// 在 Svelte onMount / React useEffect 內部
const scope = createScope({ root: containerElement });

// 限域查詢選擇器
scope.qs('.card');    // 僅在根元素範圍內
scope.qsa('.item');   // 根元素內所有符合的元素

// 註冊自訂方法
scope.registerMethod('customAnimation', (el) => {
  animate(el, { scale: 1.2 });
});

// 卸載時清理
onDestroy(() => scope.revert());

WAAPI 整合

直接回答:WAAPI 模組(來自 animejswaapi)提供相同的 Anime.js 語法,但透過瀏覽器原生 Web Animations API 驅動動畫,產生的捆綁體積僅 3 KB。它支援相同的 animate() 簽名、stagger() 和緩動函式。

對於捆綁體積至關重要的專案,WAAPI 整合提供了一個極具吸引力的替代方案:

import { waapi, stagger } from 'animejs';

waapi.animate('span', {
  translate: '0 -2rem',
  delay: stagger(100),
  duration: 600,
  loop: true,
  alternate: true,
  ease: 'inOut(2)',
});

何時使用 WAAPI 與核心引擎:

情境建議
最大程度節省捆綁體積WAAPI(3 KB)
最大元素數量(3000+)核心引擎(大規模下 60fps)
SVG 動畫核心引擎
彈簧物理核心引擎
簡單 CSS 轉場WAAPI
瀏覽器原生效能WAAPI

引擎設定與效能

直接回答engine 模組暴露全域設定,包括幀率上限(v4.3 中可達 240 FPS)、預設參數、播放時間單位,以及在文件隱藏時的自動暫停行為。

引擎設定

import { engine } from 'animejs';

engine.defaults = { duration: 500, ease: 'outQuad' }; // 全域預設
engine.useDefaultMainLoop = false;  // 停用內建迴圈
engine.update();                     // 手動更新影格
engine.pauseOnDocumentHidden = true; // 分頁隱藏時暫停
engine.timeUnit = 'ms';             // 'ms' 或 's'
engine.precision = 2;               // 數值的十進位精確度

效能基準

Anime.js v4 的渲染引擎已針對大規模動畫進行最佳化:

情境元素/補間效能
DOM 元素(CSS 變形)3000 個元素,6000 個補間2019 年 Intel MacBook Pro 上 60 fps
three.js InstancedMesh50000 個網格值,100000 個補間流暢 60 fps
WAAPI 路徑因瀏覽器引擎而異瀏覽器原生效能
引擎幀率上限(v4.3+)最高 240 fps
最小捆綁(WAAPI)約 3 KB gzipped

瀏覽器支援

瀏覽器最低版本
Chrome79+
Edge79+
Firefox71+
Safari13+

Anime.js v4 不支援 Internet Explorer。


版本歷史:v4.2 與 v4.3

直接回答:v4.2 系列(2025 年 9 月)新增了彈簧 bounce、WAAPI 緩動、CSS 變數值以及子路徑匯入。v4.3 系列(2026 年 1 月至 2 月)新增了 createLayout,將最大 FPS 提升至 240,並發布了多項錯誤修正。

該函式庫在 2025 和 2026 年期間保持活躍維護,發布節奏快速:

版本日期主要變更
v4.0.02025 年 4 月初始 v4 發布:模組化 API、新參數、時間軸、彈簧、拖曳、SVG、文字
v4.2.02025 年 9 月彈簧 bounce 參數、子路徑匯入、createSeededRandom、CSS 變數值、WAAPI 緩動
v4.2.12025 年 10 月SVG createMotionPath 偏移、Draggable dragThreshold
v4.3.02026 年 1 月 20 日createLayout()、函式式緩動、時間軸合成、最大 FPS 120 -> 240
v4.3.12026 年 1 月 21 日錯誤修正:內聯標籤偵測與註解(Layout)
v4.3.22026 年 1 月 23 日錯誤修正:來自 v4.3.1 的內聯標籤回歸
v4.3.32026 年 1 月 23 日函式式 from 值的重新整理支援、重新整理時的單位轉換、onResize 回呼
v4.3.42026 年 1 月 24 日WAAPI 同步自動持久化、註解語法修正
v4.3.52026 年 1 月 25 日Auto Layout 內聯回歸修正、背景顏色回歸修正
v4.3.62026 年 2 月 14 日Auto Layout onScroll 同步修正

延伸閱讀與資源


Anime.js 由 Julian Garnier 建立與維護,並以 MIT 授權釋出。本指南根據官方 animejs.com 文件、juliangarnier/anime GitHub 儲存庫以及社群資源編寫。最後更新於 2026 年 5 月 2 日。

TAG