npm install animejs --save
我是在vue项目下
import anime from 'animejs/lib/anime.es.js';
更多下载和引用可以查看官网
GitHub - juliangarnier/anime: JavaScript animation engine
需要动画的元素
- <section>
- <div class="box">1div>
- <div class="box">2div>
- <div class="box">3div>
- <div class="box">4div>
- section>
引入anime实例,可以直接使用
- let boxs = document.querySelectorAll(".box");
- anime({
- targets: boxs,
- translateX: '250px',
- })
targets 为选中的 dom,单个或者数组,也可是直接写 css选择器
两行代码的效果就是,boxs 选中的dom ,会向 x 轴移动 250px
类似的值(宽高、缩放、位移等等)都可以选择带不带单位,百分比,也支持数组,混用,比如我们需要,元素在开始的时候在 y轴 200px 的位置,动画结束后,回到原位可以这样写:
translateX: ['200px',0],
可以编辑数字,innerHTML,设置步长,小数点位数
- innerHTML: [0, 1000],
- step: [10],
- round: 1, // 为1的时候显示整数
也支持动画属性,按顺序播放,使用 duration 指定每一个动画属性的持续时间
- translateX: {
- value: 250,
- duration: 800
- },
- rotate: {
- value: 360,
- duration: 1800,
- easing: 'easeInOutSine'
- },
上面代码的效果:先x轴位移,持续800毫秒,之后再进行旋转,1800毫秒
direction:'xxxx'
| 属性 | 描述 |
'normal' | 动画进度从 0% 变为 100% |
'reverse' | 动画进度从 100% 变为 0% |
'alternate' | 动画进度从 0% 变为 100%,然后返回到 0% |
loop: 3,
| 属性 | 描述 |
Number | 迭代次数 |
true | 无限期循环 |
如果你需要多个元素,各自按不同的处理进行动画,你就需要 anime.stagger
- delay: anime.stagger(100)
- delay: anime.stagger(100, {start: 500})
- rotate: anime.stagger([-360, 360])
三个例子:
1. 延迟按照,第一个 盒子 100*0,第二个盒子 100*1
2.附带开始延迟:第一个 盒子 500+(100*0),第二个盒子 500+(100*1)
3.数组 平均分配给元素, 比如两个元素,第一个就是 -360 第二个就是 360
anime.stagger 第二个参数对象 也可选 from
delay: anime.stagger(400, { from: "center" })
center 比如有4个元素被选中, 动画从 中间的两个元素先开始
例:
- class="box">1
- <div class="box">2div>
- <div class="box">3div>
- <div class="box">4div>
-
- let boxs = document.querySelectorAll(".box");
- anime({
- delay: anime.stagger(400, { from: "center" })
- });
盒子 2 3 先进行动画,随后是 1和4
还有 easing direction grid 等等,可有类似波纹特效
更多动画选项可以查看官方文档: