介绍
补间动画是指在一定时间内,从一个状态过渡到另一个状态的动画效果。在 threejs 中,可以使用 Tween.js
库来实现补间动画,也可以使用 GSAP
库,后续将使用 GSAP
来实现动画效果。
GSAP
GSAP
是一个强大的动画库,它可以实现各种复杂的动画效果,它不仅可以操作 DOM 元素,还可以操作数据对象。
安装
引入
1
| import { gsap } from "gsap";
|
常用 API
to
设置目标状态,从当前状态过渡到目标状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| const tween = gsap.to(".box", { x: 100, opacity: 1, duration: 1, ease: "power1.inOut", repeat: -1, delay: 1, yoyo: true, paused: true, onStart() { console.log("动画开始"); }, onUpdate() { console.log("动画更新中..."); }, onComplete() { console.log("动画完成"); }, }); tween.play(); tween.pause(); tween.resume(); tween.reverse(); tween.restart();
|
设置目标状态,从目标状态过渡到当前状态
1 2 3
| gsap.from(".box", { });
|
指定起始状态到目标状态
1 2 3 4 5 6 7 8 9
| gsap.fromTo( ".box", { }, { } );
|
set
设置元素的属性值,不产生动画效果
1
| gsap.set(".box", { color: "#f00" });
|
timeline
创建时间轴,用于控制动画的顺序,不需要手动计算延迟时间,可以更好的编排动画。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| const tl = gsap.timeline();
tl.to(".box", { x: 100, duration: 2 }, 1);
tl.to(".box", { x: 100, duration: 1 }, "<");
tl.to(".box", { x: 100, duration: 1 }, ">");
tl.to(".box", { x: 100, duration: 1 }, "+=1");
tl.to(".box", { x: 100, duration: 1 }, "-=1");
tl.from(); tl.fromTo(); tl.set();
|
与 threejs 结合
示例:将摄像机从 x 轴 0 移动到 x 轴 5,持续时间为 2 秒(完成补间动画)。
1 2 3 4 5 6 7 8 9 10 11
| import { gsap } from "gsap"; import * as THREE from "three";
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
gsap.to(camera.position, { x: 5, duration: 2, });
|