模块导入 V4
Anime.js 拥有极其灵活的模块优先 API 和出色的 tree shaking 支持,使其成为最轻量级的 JavaScript 动画库之一。
Anime.js 模块可以直接从主模块 'animejs'
导入,也可以更细粒度地从特定的 子路径 导入。这可以通过使用像 Vite 或 esbuild 这样的打包工具来实现,或者在不进行构建的情况下,使用 importmap 原生导入。
从主模块导入
每个 Anime.js 模块都可以直接从主模块 'animejs'
导入
import { animate, splitText, stagger, random } from 'animejs';
const split = splitText('p');
animate(split.words, {
opacity: () => random(0, 1, 2),
delay: stagger(50),
});
从子路径导入
当不使用打包工具,或者项目无法激活 tree shaking 时,即使只使用一个模块,也需要导入整个库。
为了解决这个问题,Anime.js 允许从子路径导入特定功能,而无需在开发过程中的任何时候加载整个库。
每个函数都可以直接从其子路径导入
import { animate } from 'animejs/animation';
import { splitText } from 'animejs/text';
import { stagger, random } from 'animejs/utils';
const split = splitText('p');
animate(split.words, {
opacity: () => random(0, 1, 2),
delay: stagger(50),
});
这种方法确保只加载指定功能所需的代码。
可用子路径列表
import { animate } from 'animejs/animation';
import { createTimer } from 'animejs/timer';
import { createTimeline } from 'animejs/timeline';
import { createAnimatable } from 'animejs/animatable';
import { createDraggable } from 'animejs/draggable';
import { createScope } from 'animejs/scope';
import { engine } from 'animejs/engine';
import * as events from 'animejs/events';
import * as easings from 'animejs/easings';
import * as utils from 'animejs/utils';
import * as svg from 'animejs/svg';
import * as text from 'animejs/text';
import * as waapi from 'animejs/waapi';
无需打包工具导入 ES 模块
借助 importmap
,主模块和任何子路径模块都可以像使用打包工具一样导入,但无需构建步骤
<script type="importmap">
{
"imports": {
"animejs": "/node_modules/animejs/dist/modules/index.js",
"animejs/animation": "/node_modules/animejs/dist/modules/animation/index.js",
"animejs/timer": "/node_modules/animejs/dist/modules/timer/index.js",
"animejs/timeline": "/node_modules/animejs/dist/modules/timeline/index.js",
"animejs/animatable": "/node_modules/animejs/dist/modules/animatable/index.js",
"animejs/draggable": "/node_modules/animejs/dist/modules/draggable/index.js",
"animejs/scope": "/node_modules/animejs/dist/modules/scope/index.js",
"animejs/engine": "/node_modules/animejs/dist/modules/engine/index.js",
"animejs/events": "/node_modules/animejs/dist/modules/events/index.js",
"animejs/easings": "/node_modules/animejs/dist/modules/easings/index.js",
"animejs/utils": "/node_modules/animejs/dist/modules/utils/index.js",
"animejs/svg": "/node_modules/animejs/dist/modules/svg/index.js",
"animejs/text": "/node_modules/animejs/dist/modules/text/index.js",
"animejs/waapi": "/node_modules/animejs/dist/modules/waapi/index.js"
}
}
</script>
<script type="module">
import { animate } from 'animejs/animation';
import { splitText } from 'animejs/text';
import { stagger, random } from 'animejs/utils';
const split = splitText('p');
animate(split.words, {
opacity: () => random(0, 1, 2),
delay: stagger(50),
});
</script>