Anime.js 是一个快速、多用途且轻量的 JavaScript 动画库,拥有简单但强大的 API。
它可以用于 CSS 属性、SVG、DOM 属性和 JavaScript 对象。
使用方法
Anime.js V4 通过引入 ES modules 的方式使用:
javascript
import {
animate,
stagger,
} from 'animejs';
animate('.square', {
x: 320,
rotate: { from: -180 },
duration: 1250,
delay: stagger(65, { from: 'center' }),
ease: 'inOutQuint',
loop: true,
alternate: true
});
|
|
V4 文档
完整英文文档请查看 这里。
NPM 开发脚本
首先运行 npm i 来安装所有必要的依赖包。
然后通过 npm run <script> 执行以下脚本。
| script | 功能 |
|---|---|
dev |
监听 src/ 中的改动并将 esm 版本编译到 lib/anime.esm.js |
dev-types |
和 dev 一样,但还会运行 TypeScript 并生成 types/index.d.ts 文件 |
build |
生成类型定义并将 ESM / UMD / IIFE 版本编译到 lib/ |
test-browser |
启动本地服务器并运行所有浏览器相关的测试 |
test-node |
运行所有 Node 相关的测试 |
open-examples |
启动本地服务器以便本地浏览示例 |
V4 API 不兼容变更概览
动画
- import anime from 'animejs';+ import { animate, createSpring, utils } from 'animejs';- anime({- targets: 'div',+ animate('div', {translateX: 100,rotate: {- value: 360,+ to: 360,- easing: 'spring(.7, 80, 10, .5)',+ ease: createSpring({ mass: .7, damping: 80, stiffness: 10, velocity: .5}),},- easing: 'easeinOutExpo',+ ease: 'inOutExpo',- easing: () => t => Math.cos(t),+ ease: t => Math.cos(t),- direction: 'reverse',+ reversed: true,- direction: 'alternate',+ alternate: true,- loop: 1,+ loop: 0,- round: 100,+ modifier: utils.round(2),- begin: () => {},+ onBegin: () => {},- update: () => {},+ onUpdate: () => {},- change: () => {},+ onRender: () => {},- changeBegin: () => {},- changeComplete: () => {},- loopBegin: () => {},- loopComplete: () => {},+ onLoop: () => {},- complete: () => {},+ onComplete: () => {},});
Promise
- import anime from 'animejs';+ import { animate, utils } from 'animejs';- anime({ targets: target, prop: x }).finished.then(() => {});+ animate(target, { prop: x }).then(() => {});
定时器
- import anime from 'animejs';+ import { createTimer } from 'animejs';- anime({+ createTimer({- duration: Infinity,- update: () => {},+ onUpdate: () => {},});
时间轴
- import anime from 'animejs';+ import { createTimeline, stagger } from 'animejs';- anime.timeline({+ createTimeline({- duration: 500,- easing: 'easeInOutQuad',+ defaults: {+ duration: 500,+ ease: 'inOutQuad',+ }- loop: 2,+ loop: 1,- }).add({- targets: 'div',+ }).add('div', {rotate: 90,})- .add('.target:nth-child(1)', { opacity: 0, onComplete }, 0)- .add('.target:nth-child(2)', { opacity: 0, onComplete }, 100)- .add('.target:nth-child(3)', { opacity: 0, onComplete }, 200)- .add('.target:nth-child(4)', { opacity: 0, onComplete }, 300)+ .add('.target', { opacity: 0, onComplete }, stagger(100))
stagger(错位动画)
- import anime from 'animejs';+ import { animate, stagger } from 'animejs';- anime({- targets: 'div',+ animate('div', {- translateX: anime.stagger(100),+ translateX: stagger(100),- delay: anime.stagger(100, { direction: 'reversed' }),+ translateX: stagger(100, { reversed: true }),});
SVG
- import anime from 'animejs';+ import { animate, svg } from 'animejs';- const path = anime.path('path');+ const { x, y, angle } = svg.createMotionPath('path');- anime({- targets: '#shape1',+ animate('#shape1', {- points: '70 41 118.574 59.369 111.145 132.631 60.855 84.631 20.426 60.369',+ points: svg.morphTo('#shape2'),- strokeDashoffset: [anime.setDashoffset, 0],+ strokeDashoffset: svg.drawLine(),- translateX: path('x'),- translateY: path('y'),- rotate: path('angle'),+ translateX: x,+ translateY: y,+ rotate: angle,});
工具函数(Utils)
- import anime from 'animejs';+ import { utils } from 'animejs';- const value = anime.get('#target1', 'translateX');+ const value = utils.get('#target1', 'translateX');- anime.set('#target1', { translateX: 100 });+ utils.set('#target1', { translateX: 100 });- anime.remove('#target1');+ utils.remove('#target1');- const rounded = anime.round(value);+ const rounded = utils.round(value, 0);
引擎
- import anime from 'animejs';+ import { engine } from 'animejs';- anime.suspendWhenDocumentHidden = false;+ engine.pauseWhenHidden = false;- anime.speed = .5;+ engine.playbackRate = .5;
