安装使用

npm install animejs
import anime from "animejs";

参数说明

参数 默认值 取值 说明
delay 0 number,function(el, index, total) 动画延迟 ms
duration 1000 number,function(el, index, total) 持续时间 ms anime.stagger(200)
autoplay true boolean 自动播放
loop false number, boolean 定义动画往复循环
direction normal ‘normal’, ‘reverse’, ‘alternate’ 动画方向
easing easeOutElastic 时间曲线
elasticity 400 number
round false number, boolean 向上舍入为x小数
begin undefined function(anime)
update undefined function(anime)
complete undefined function(anime)

动画目标对象

  1. CSS 选择器,不可使用伪元素
  2. DOM 节点或节点集合
  3. JAVASCRIPT 对象,必须包含一个数字属性
  4. 数组
1
2
3
4
anime({
targets: ['.el', '.el-02', '.el-03'],
translateX: 250
});

可动画的属性

  1. CSS 属性,大多数属性会导致布局更改或重绘,优先考虑 opacity、transforms
  2. 包含数值的 JAVASCRIPT 对象属性
  3. 包含数值的 DOM 属性
  4. SVG 属性

动画赋值方式

  1. 无单位数值:原始值具有单位会自动补全
  2. 相对数值:’+=、-=、*=‘ number
  3. 颜色:#ffffff、RGBA、HSLA
  4. 强制动画以指定值开始 [50%, 100%]
  5. 函数返回值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
anime({
targets: '.el',
translateX: function(el) {
return el.getAttribute('data-x');
},
translateY: function(el, i) {
return 50 + (-50 * i);
},
scale: function(el, i, l) {
return (l - i) + .25;
},
rotate: function() { return anime.random(-360, 360); },
borderRadius: function() { return ['50%', anime.random(10, 35) + '%']; },
duration: function() { return anime.random(1200, 1800); },
delay: function() { return anime.random(0, 400); },
direction: 'alternate',
loop: true
});

关键帧

动画关键帧使用 keyframes 属性中的数组定义

1
2
3
4
5
keyframes: [
{translateY: -40},
{translateX: 250},
{translateY: 40}
],

交错动画

anime.stagger(value, options)

  1. 基础交错
    delay: anime.stagger(100) 每个元素的延迟增加100ms

  2. 从特定值开始交错
    delay: anime.stagger(100, {start: 500}) 延迟从500ms开始,每个元素只能加 100ms

  3. 数值范围内均匀分配值
    rotate: anime.stagger([-360, 360]) 旋转将在-360deg到360deg之间均匀分布在所有元素之间

  4. 交错开始位置
    delay: anime.stagger(100, {from: 'center'})
    from:参数值(first、last、center、index)

  5. 交错顺序
    delay: anime.stagger(100, {direction: 'reverse'})

  6. 交错时间线
    delay: anime.stagger(100, {easing: 'easeOutQuad'})

  7. 网格交错

    1
    2
    3
    4
    5
    scale: [
    {value: .1, easing: 'easeOutSine', duration: 500},
    {value: 1, easing: 'easeInOutQuad', duration: 1200}
    ],
    delay: anime.stagger(200, {grid: [14, 5], from: 'center'})
  8. 网格交错方向
    anime.stagger(value, {grid: [rows, columns], axis: 'x'})

时间轴

让多个动画同步,默认时间轴中的每个动画都会在上一个动画结束时开始

1
2
var myTimeline = anime.timeline(parameters);
myTimeline.add(parameters, offset);

offset:时间偏移量

参数继承

父时间轴实例中的参数由所有子项继承

支持的参数:targets、duration、delay、endDelay、round

动画控制

play、pause、restart、reverse

  • 跳转
    animation.seek(animation.duration * (seekProgressEl.value / 100));

回调函数

update:动画开始后,每一帧都会触发
begin、complete
loopBegin、loopComplete
change、changeBegin、changeComplete

finished.then() 动画完成后返回 promise IE11 以下不支持

SVG 路径动画

  • 画线动画

anime.setDashoffset() 方法获取到SVG路径的长度并将此长度设置为SVG的stroke-dasharray值,并返回该长度再使用strokeDashoffset将SVG的stroke-dashoffset属性值在from to格式中产生动画从而创建路径绘制效果

strokeDashoffset: [anime.setDashoffset, 0]

SVG 画线原理

  1. SVG形状
  2. 形状必须有笔触 stroke、stroke-width
  3. 笔画可以虚线