网页开发

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
CATEGORIES