theme-shokax-anime API
大约 3 分钟
theme-shokax-anime API
可用区: head api
(前端可用,但需在脚本引入后)
基础使用
defaultOptions
const defaultOptions = {
targets: null,
duration: Infinity,
easing: "linear",
delay: 0,
begin: null,
update: null,
complete: null,
};
anime
用于构造 anime 对象
接收参数
option: AnimeOptions
: (可选,默认为defaultOptions
)配置选项
返回类型
Anime
: Anime 类,包含原型方法和实例方法
示例
const animeInstance = anime({
targets: document.getElementById("imgs"),
duration: 1000,
easing: "linear",
delay: 0,
opacity: 1,
});
anime.random
生成指定范围内的随机整数
接收参数
min: number
: 随机数的最小值max: number
: 随机数的最小值
返回类型
number
: 生成的随机数
Anime.prototype.timeline
用于从 anime 中构造 timeline 对象
返回类型
Timeline
: 时间轴对象
示例
const timelineInstance = anime().timeline();
Anime.prototype.play
启动动画
返回类型
void
示例
anime({
targets: document.getElementById("imgs"),
duration: 1000,
easing: "linear",
delay: 0,
opacity: 1,
}).play();
Timeline.prototype.add
向时间轴中添加动画
接收参数
option: AnimeOptions
: (可选,默认为defaultOptions
)配置选项
返回类型
Timeline
: 以支持链式调用
示例
const timelineInstance = anime()
.timeline()
.add({
targets: particules,
duration: anime.random(1200, 1800),
easing: "easeOutExpo",
update: renderParticule,
radius: 0.1,
})
.add({
targets: circle,
duration: anime.random(1200, 1800),
easing: "easeOutExpo",
update: renderParticule,
radius: anime.random(80, 160),
lineWidth: 0,
});
Timeline.prototype.play
启动时间轴动画
返回类型
void
示例
anime()
.timeline()
.add({
targets: particules,
duration: anime.random(1200, 1800),
easing: "easeOutExpo",
update: renderParticule,
radius: 0.1,
})
.add({
targets: circle,
duration: anime.random(1200, 1800),
easing: "easeOutExpo",
update: renderParticule,
radius: anime.random(80, 160),
lineWidth: 0,
})
.play();
深入配置
AnimeOptions
targets: any
: (可选)动画对象,含多个可选类型:DOM 对象
targets: document.getElementById("imgs");
简单对象
targets: { x: 1, y: 2 }
数组
targets: [ { x: 1, y: 2 }, { x: 2, y: 3 }, { x: 3, y: 4 }, ];
duration: number
: (可选)动画持续时间,单位毫秒常规动画
duration: 1000;
无限动画
duration: Infinity;
easing: string
: (可选)动画类型,参见下文EasingTypesdelay: number
: (可选)动画延迟时间,单位毫秒begin: (targets: any) => void
: (可选)开始回调,在动画开始之前被调用update: (targets: any) => void
: (可选)更新回调,在每次更新后被调用complete: (targets: any) => void
: (可选)结束回调,在动画结束之后被调用[index:string]:any
: (可选)动画对象中需要变化的属性及其终态值,含多个可选类型:基础类型,仅包含终态值
lineWidth: 0;
对象类型,可以对单个属性做更多配置
alpha: { value: 0, // 终态值,必填 easing: "linear", // 类型 duration: anime.random(600, 800) // 持续时间,必填 }
数组类型,含初态和终态两个值
x: [10, 20];
关键帧模式,可以做到更细力度的控制
x: [ { value: 10, duration: 200 }, { value: 20, duration: 400 }, ];
函数类型
y: (item) => item.x;
支持 px 和百分比
x: '100%', y: '20px', z: ['0%', '100%']
EasingTypes
type EasingTypes =
| "linear"
| "easeInSine"
| "easeOutSine"
| "easeInOutSine"
| "easeOutInSine"
| "easeInQuad"
| "easeOutQuad"
| "easeInOutQuad"
| "easeOutInQuad"
| "easeInCubic"
| "easeOutCubic"
| "easeInOutCubic"
| "easeOutInCubic"
| "easeInQuart"
| "easeOutQuart"
| "easeInOutQuart"
| "easeOutInQuart"
| "easeInQuint"
| "easeOutQuint"
| "easeInOutQuint"
| "easeOutInQuint"
| "easeInExpo"
| "easeOutExpo"
| "easeInOutExpo"
| "easeOutInExpo"
| "easeInCirc"
| "easeOutCirc"
| "easeInOutCirc"
| "easeOutInCirc"
| "easeInBack"
| "easeOutBack"
| "easeInOutBack"
| "easeOutInBack"
| "easeInBounce"
| "easeOutBounce"
| "easeInOutBounce"
| "easeOutInBounce";
示例(节选自 ShokaX)
// 创建一个圆形
const circle = createCircle(x, y);
// 创建一个空数组用于存储烟花粒子
const particules = [];
// 循环创建烟花粒子
for (let i = 0; i < numberOfParticules; i++) {
particules.push(createParticule(x, y));
}
// 创建一个 anime.js 的时间线,并添加动画
anime()
.timeline()
.add({
targets: particules,
// x 坐标移动到烟花粒子的终点坐标
// 动画持续时间为 anime.random(1200, 1800)
duration: anime.random(1200, 1800),
// 动画缓动效果为 easeOutExpo
easing: "easeOutExpo",
// 更新渲染函数
update: (targets) => {
// 遍历所有可动画的对象
for (const target of targets) {
// 调用对象上的draw函数来绘制烟花粒子
target.draw();
}
},
x: (p) => p.endPos.x,
y: (p) => p.endPos.y,
// 半径变为0.1
radius: 0.1,
})
.add({
targets: circle,
// 圆形半径变为 anime.random(80, 160)
duration: anime.random(1200, 1800),
easing: "easeOutExpo",
// 更新渲染函数
update: (targets) => {
// 遍历所有可动画的对象
for (const target of targets) {
// 调用对象上的draw函数来绘制烟花粒子
target.draw();
}
},
radius: anime.random(80, 160),
lineWidth: 0,
// 透明度变化,最终值为0
alpha: {
value: 0,
easing: "linear",
// 持续时间为 anime.random(600, 800)
duration: anime.random(600, 800),
},
})
.play();