JavaScript Animation
But for usage like CSS animation, you don't need to calculate timing and movement relationship.
...and easily add momentum effect
gsap.to(targetDOM, {
y: '+=200',
duration: 1, // in 1 seconds
});
<div id="targetDOM" style="transform3d(0, 200px, 0)" />
gsap.from(targetDOM, {
y: '-=200',
duration: 1, // in 1 seconds
});
<div id="targetDOM" style="transform3d(0, -200px, 0)" />
.
.
.
<div id="targetDOM" style="transform3d(0, 0, 0)" />
var timeline = gsap.timeline({repeat: 2, repeatDelay: 1});
timeline.to('#targetDOM', {x: 100, duration: 0.5});
timeline.to('#targetDOM', {y: 50, duration: 1});
timeline.to('#targetDOM2', {opacity: 0, duration: 0.5});
like keyframes, but control multiple elements
0s
1s
2s
3s
DOM1
DOM1
DOM1
DOM1
DOM2
DOM2
DOM2
DOM1
timeline.pause();
timeline.resume();
timeline.seek(1.5);
timeline.reverse();
// Nesting
timeline.add(timeline2);
// Labeling
timeline.addLabel("spin", 3);
timeline.to(".class", {duration: 2, rotation: "+=360"}, "spin");
timeline.play("spin");
gsap.to("#circle", {duration: 1, morphSVG: "#hippo"});
gsap.to(element, {
duration: 2,
physics2D: {
velocity: 300,
angle: -60,
acceleration: 50,
accelerationAngle: 180,
},
});
Combine timeline animation with user's scroller.
const timeline = gsap.timeline({
scrollTrigger: {
trigger: '.container',
pin: true,
start: 'top top',
end: '+=500',
scrub: 1, // momentum
snap: {
snapTo: 'labels',
duration: {
min: 0.2,
max: 3,
},
delay: 0.2,
ease: "power1.inOut",
},
},
});
const timeline = gsap.timeline({
scrollTrigger: {
trigger: '.container',
start: 'top top',
end: '+=500',
},
});
Start with "top top" not means x:0, y:0, it says the scroll container relation with targetDOM (trigger).
The "top top" told GSAP, start point at the trigger boundary box's top (first top) touch the scroller's (default is viewport) boundary box's top (second top).
const timeline = gsap.timeline({
scrollTrigger: {
trigger: '.container',
pin: true,
start: 'top top',
end: '+=500',
scrub: 1, // momentum
},
});
Use the pin option, GSAP will create a virtual box with the total scroll height assigned (500px), and set the trigger element position fixed when scrolling between it.
It's easy usage for scroll animation with canvas.